Il posto più grande che ho visto è C ++ 11, che includeva la maggior parte del Rapporto tecnico 1 biblioteche. Ad esempio, per accedere alla tabella hash ( unordered_map ), era necessario #include <tr1/unordered_map> ed era nello spazio dei nomi std::tr1 . Ora, lasci la tr1 fuori da entrambi.
Lo standard C ++ è stato rivisto più volte, il più recente è C ++ 11, C ++ 03 e C ++ 98. Tuttavia, pochi compilatori implementano le specifiche complete in un'unica versione, quindi versioni diverse di compilatori diversi supportano parti diverse delle specifiche. Inoltre, poiché la specifica è scritta in un linguaggio naturale (inglese), presenta delle ambiguità e i casi d'angolo possono essere gestiti in modo diverso da compilatori diversi.
Allo stesso modo, in un'implementazione della libreria standard, #include <vector> può automaticamente #include <algorithm> , mentre in un altro, non può. Pertanto, in un'implementazione, potresti riuscire a utilizzare i metodi in algorithm senza includerlo, anche se il tuo programma non è tecnicamente conforme alle specifiche C ++.
Per quanto riguarda la standardizzazione primaria, se stai iniziando un progetto da zero ora, dovresti usare C ++ 11 e l'ultima versione stabile del tuo compilatore preferito. Non tutte le funzionalità sono completamente implementate da tutti i compilatori, ma ad es. dovresti usare unique_ptr invece di auto_ptr , usare (semplice) lambdas e la parola chiave auto dove migliora la leggibilità.