2015-12-14 10 views
6

Ho alcune intestazioni che combattono con C++ 11 ma mi piacerebbe utilizzare funzionalità come gli elenchi di inizializzatori nel mio codice. La mia ricerca dice che è possibile attivare nuove funzionalità a l'unica riga di comando, come:Esiste un prgma GCC per attivare e disattivare C++ 11?

g++ -std=c++11 

Quello che mi piace molto è quello di mettere nel mio codice:

#pragma CXX11_OFF 
#include <old.hpp> 
#pragma CXX11_ON 

vector<int> v {1,2,3}; 

non sono stato in grado di trovare un tale pragma Esiste?

+7

Ha senso attivare e disattivare C++ 11 all'interno dello stesso file? Potrebbe essere difficile da interpretare. – Brian

+5

In che modo "combatte" con C++ 11? – Eric

+0

È vagamente possibile che il compilatore possa supportare una cosa del genere, ma sarebbe estremamente difficile. L'istruzione ex ++ C++ fa qualcosa di simile, ma non riesco a immaginare agli scrittori di compilatori di fare così tanto sforzo per ogni versione dello standard C++. –

risposta

0

Non so se esiste un simile pragma. Ma accendere e spegnere C++ 11 durante la stessa unità di compilazione mi sembra imbarazzante. Forse dovresti inserire la parte "vecchia" all'interno di una DLL e importarla nella parte "nuova". Quindi è possibile compilare solo la nuova parte con C++ 11 abilitato

+1

Anche nella directory di origine funziona finché si utilizzano regole di compilazione diverse. Non è diverso dal mixare C e C++. –

0

Poiché tale pragma non esiste, il mio suggerimento è di fare affidamento su make/cmake per selezionare i file "giusti" basati su una bandiera di compilazione.

0

#pragma GCC diagnostic warning "-std=c++11"

Questa linea aggiunge una bandiera cpp 11 a compilatore.

Problemi correlati