2015-01-09 5 views
5

Come è possibile abilitare il supporto C++ 14 in QtCreator 3.3 utilizzando Clang 3.5? Ho aggiunto un kit Clang e ho aggiunto CONFIG += c++14 nel mio file di progetto. Tuttavia quando si usa per es. return type deduction ottengo il seguente errore:Supporto C++ 14 in QtCreator con Clang

error: 'auto' return without trailing return type; deduced return types are a C++1y extension

+0

http : //stackoverflow.com/q/27857253/862973 – ldgorman

+0

hai duplicato la tua domanda? – ldgorman

+0

Il messaggio di errore dovrebbe fornire un suggerimento con la parte "C++ 1 *** y ***". Prova ad usare per es. 'C++ 1y' invece. Forse è necessario aggiungere per es. '-std = C++ 14' (o' -std = C++ 1y') da qualche parte (non sono così familiare con QtCreator e il suo file di configurazione). –

risposta

3

ho dovuto andare al Makefile nella cartella di compilazione e sostituire manualmente -std=c++11 con -std=c++14.

Fortunatamente il Makefile viene scritto una sola volta quando si aggiunge il kit al progetto. Ho dovuto farlo solo una volta e ho potuto creare in QtCreator tutte le volte che voglio.

Quindi ora posso utilizzare un kit Clang per utilizzare tutte le nuove funzionalità di C++ 14. Come bonus, posso anche utilizzare tutte le funzionalità di C++ 17 se imposto manualmente -std=c++1z nel Makefile. Dolce!

+2

Si potrebbe fare 'QMAKE_CXXFLAGS + = -std = C++ 1z' ​​nel file' .pro' invece – Drop

+0

@Drop: l'ho provato prima. Non funziona perché in qualche modo aggiunge '-std = C++ 1z' ​​** e **' -std = C++ 11' al Makefile. – gartenriese

+0

Ti sei dimenticato di rimuovere 'CONFIG + = C++ 14'? – nib

6

è possibile utilizzare CONFIG += c++14 in .pro file con Qt5.5

ma c'è un bug con clangore, quindi abbiamo bisogno di modificare il file Qt/5.5/clang_64/mkspecs/features/c++14.prf, aggiungere questo codice prima include(c++11.prf):

contains(QMAKE_LFLAGS_CXX11, -stdlib=libc++) { 
    QMAKE_CXXFLAGS_CXX11 += -stdlib=libc++ 
} 
+0

Il mio file 'C++ 14.prf' aveva guardie che intendevano fermare' -std = C++ 1y' specificato se Clang era precedente a 3.2. o versione 4 su Apple. Ho commentato quelle guardie: tocca il legno, funziona! –