2016-04-05 13 views
6

Filesystem Technical Specification (TS) è stato recentemente integrato nello standard C++ 17.È sicuro utilizzare le specifiche tecniche C++ approvate per uno standard futuro in uno standard precedente?

Lo stesso TS è disponibile anche per C++ 14, ma in questo caso è tecnicamente solo "sperimentale". Tuttavia il fatto che sia stato approvato per C++ 17 mi fa pensare che sia abbastanza maturo e che possa essere usato tranquillamente.

Quando si lavora su un progetto C++ 14 che molto probabilmente verrà aggiornato a C++ 17 in futuro, e supponendo che il compilatore che uso lo supporti su entrambe le versioni, si sconsiglia l'uso del TS "sperimentale", considerando che farà ufficialmente parte del prossimo standard?

La mia domanda ovviamente si estende a qualsiasi TS che è stato accettato in una versione futura di C++ e che è disponibile per gli standard precedenti.

+0

Chiedi al tuo fornitore. La più grande preoccupazione è che le API cambino tra TS e IS in modo arbitrario, quindi c'è un costo futuro non quantificabile della migrazione. Quel costo * potrebbe * essere molto piccolo, però. –

+0

Qui non è possibile ottenere una garanzia. Nel caso improbabile che scoppi ancora, è difficile immaginare che ci vorranno più di un paio d'ore per ripiegare su Boost.Filesystem. Se pensi che sia "sicuro", nessuno lo sa. –

+1

A meno che non si consideri il compilatore in grado di prevedere il futuro. – EJP

risposta

4

La vera domanda è se qualcuno lo ha implementato o meno, non è stato approvato/unito/qualunque sia un documento arbitrario. Le caratteristiche possono essere eliminate, aggiunte o modificate in qualsiasi momento del processo di standardizzazione. Abbiamo visto cose tagliate da C++ 14 subito prima del rilascio e anche cose che non potevano farcele che sono state successivamente modificate. I fornitori si affidano a specifiche versioni di documenti quando implementano funzionalità e quindi l'unico modo sicuro è di consultare la documentazione di qualunque compilatore si sta utilizzando.

2

Le implementazioni effettive possono contenere funzionalità che non sono nello standard corrente e possono presentare difetti in altre funzionalità definite nello standard o addirittura non riuscire ad implementare parti specifiche: Microsoft era a conoscenza del fatto che alcune parti dello standard non erano state implementate.

Ma se un compilatore supporta una funzionalità e se quella caratteristica fa parte del prossimo standard, c'è poco rischio se scompare in una versione futura di quel particolare compilatore.

Semplicemente, qualche altro compilatore potrebbe non implementarlo non appena viene approvato in standard, ma è sapere se si tratta di un problema nel tuo caso d'uso specifico.

2

È sicuro utilizzare le specifiche tecniche C++ approvate per uno standard futuro in uno standard precedente?

Dipende da cosa si intende per "sicuro"

  1. E 'portatile?

No.

  1. FUNZIONA?

È necessario controllare le note di rilascio della versione del proprio toolset e le note di rilascio della versione della libreria standard (potrebbero essere diverse).

  1. Funzionerà domani?

Chi lo sa?

  1. Devo investire tempo nel codice che presuppone che funzioni?

probabilmente no.

In sintesi, la risposta è "no".

Utilizzare la versione boost finché lo standard non viene pubblicato e il compilatore e la libreria standard sono conformi.