I produttori di compilatori hanno adottato caratteristiche C++ 11 frammentarie, il che era prevedibile, poiché molte di esse non sono facilmente implementabili.Disponibilità di funzionalità C++ 11
Il modo standard per segnalare quale specifica il compilatore supporta completamente è tramite la macro predefinita __cplusplus
. Tuttavia, i principali fornitori stanno segnalando __cplusplus
= 199711L, il che significa che supportano solo pienamente C++ 98 (ad esempio MSVC14). Questo (presumibilmente) significa che non supportano completamente le specifiche C++ 11, anche se possono aver implementato una parte del leone della funzionalità.
Vorrei iniziare a utilizzare le funzionalità di C++ 11, quando sono disponibili (e il fallback al codice esistente quando non lo sono). Tuttavia, il mio codice deve supportare molti compilatori, compresi i compilatori proprietari che potrei non avere accesso all'uso. Esiste un modo standard per sapere quali funzionalità di C++ 11 sono disponibili da un compilatore, senza sapere specificamente quale compilatore viene utilizzato? (se un compilatore si comporta in modo non standard, allora è accettabile che il comportamento di rilevamento sia errato).
NOTA: Questa domanda è una generalizzazione della mia domanda "Availability of static_assert c++11", che non è stata accolta molto bene, perché ritengo che la mia motivazione sia stata fraintesa.
gcc ha un valore diverso per '__cplusplus' a seconda di' -std = ... '. Google per wg21 + sg10 per le macro delle funzioni consigliate (non supportate da VS). Boost, cmake e altri forniscono anche modi per rilevare le funzionalità disponibili. –
@MarcGlisse (e rispondenti) Grazie per le informazioni su gcc (non lo sapevo - generalmente lavoro con VS). Tuttavia, è un compilatore specifico, voglio sapere di rilevare la disponibilità in generale. – MuertoExcobito
@MuertoExcobito Non è possibile rilevare la "disponibilità di funzionalità C++ 11" dall'origine. È necessario consultare la documentazione del compilatore, online o nel manuale. – vsoftco