Bonjour,
Voici le code que je compile. Il s'agît d'une simplification d'un truc plus gros :Première question : Si je retire tous les commentaires j'obtiens une erreur interne du compilateur ci-après citée (j'utilise QTCreator 4.10/QT5.13.1/MinGW 7.3.0 64b). Ca me l'a également fait en 32b. Quelqu'un pourrait-il me dire si cette erreur se reproduit également gcc gcc/linux?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 //template <class T> struct Test { template <unsigned _Vb, typename d=void> static constexpr unsigned U= /*Test<T>::*/U<_Vb-1,d>+2; }; //template< class T> template <typename p> constexpr unsigned Test/*<T>*/::U<0,p> = 5; int main () { enum class test { Debut,A=Debut,B,Fin }; Test/*<test>*/ testDef; }07:44:13: Exécution des étapes pour le projet Orientation...
07:44:13: Configuration inchangée, étape qmake sautée.
07:44:13: Débute : "D:\Qt\App\Tools\mingw730_64\bin\mingw32-make.exe" -f Makefile.Debug -j8 debug/Base_def.o
g++ -c -fno-keep-inline-dllexport -Wa,-mbig-obj -g -Wall -W -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I../Orientation -I. -I../../../../includes/date-master/include/date -ID:/Qt/App/5.13.0/mingw73_64/include -ID:/Qt/App/5.13.0/mingw73_64/include/QtWidgets -ID:/Qt/App/5.13.0/mingw73_64/include/QtGui -ID:/Qt/App/5.13.0/mingw73_64/include/QtANGLE -ID:/Qt/App/5.13.0/mingw73_64/include/QtCore -Idebug -I. -I\include -ID:/Qt/App/5.13.0/mingw73_64/mkspecs/win32-g++ -o debug/Base_def.o ../Orientation/Base_def.cpp
../Orientation/Base_def.cpp:8:29: error: expected ';' before ',' token
Test<T>::U<_Vb-1,d>+2;
^
../Orientation/Base_def.cpp: In function 'int main()':
../Orientation/Base_def.cpp:18:16: warning: unused variable 'testDef' [-Wunused-variable]
Test<test> testDef;
^~~~~~~
mingw32-make: *** [Makefile.Debug:292: debug/Base_def.o] Error 1
07:44:13: Le processus "D:\Qt\App\Tools\mingw730_64\bin\mingw32-make.exe" s'est terminé avec le code 2.
Erreur lors de la compilation/déploiement du projet Orientation (kit : Desktop Qt 5.13.0 MinGW 64-bit)
When executing step "Make"
07:44:13: Temps écoulé : 00:01.
Deuxième question : Maintenant je remets les commentaires et j'obtiens la suite.
Ci après la sortie du compilo :J'en déduis qu'on ne peut déclarer de variable récursivement dans ce cas là (il me dit que U n'existe pas). Là j'ai un peu du mal, car je souhaite créer une forme de liste de valeurs liées entre elles de cette manière. Une possibilité de contourner cela (il faut que ce soit constexpr car l'objectif est d'utiliser les variables obtenues dans des déclarations template)?07:29:36: Exécution des étapes pour le projet Orientation...
07:29:36: Configuration inchangée, étape qmake sautée.
07:29:36: Débute : "D:\Qt\App\Tools\mingw730_64\bin\mingw32-make.exe" -f Makefile.Debug -j8 debug/Base_def.o
g++ -c -fno-keep-inline-dllexport -Wa,-mbig-obj -g -Wall -W -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I../Orientation -I. -I../../../../includes/date-master/include/date -ID:/Qt/App/5.13.0/mingw73_64/include -ID:/Qt/App/5.13.0/mingw73_64/include/QtWidgets -ID:/Qt/App/5.13.0/mingw73_64/include/QtGui -ID:/Qt/App/5.13.0/mingw73_64/include/QtANGLE -ID:/Qt/App/5.13.0/mingw73_64/include/QtCore -Idebug -I. -I\include -ID:/Qt/App/5.13.0/mingw73_64/mkspecs/win32-g++ -o debug/Base_def.o ../Orientation/Base_def.cpp
../Orientation/Base_def.cpp:8:26: error: 'U' was not declared in this scope
/*Test<T>::*/U<_Vb-1,d>+2;
^
../Orientation/Base_def.cpp:13:33: error: duplicate initialization of 'Test::U<0, p>'
constexpr unsigned Test/*<T>*/::U<0,p> = 5;
^~~~~~
../Orientation/Base_def.cpp:13:33: error: got 1 template parameters for 'constexpr const unsigned int Test::U<_Vb, d>'
../Orientation/Base_def.cpp:13:33: error: but 2 required
../Orientation/Base_def.cpp: In function 'int main()':
../Orientation/Base_def.cpp:18:20: warning: unused variable 'testDef' [-Wunused-variable]
Test/*<test>*/ testDef;
^~~~~~~
mingw32-make: *** [Makefile.Debug:292: debug/Base_def.o] Error 1
07:29:37: Le processus "D:\Qt\App\Tools\mingw730_64\bin\mingw32-make.exe" s'est terminé avec le code 2.
Erreur lors de la compilation/déploiement du projet Orientation (kit : Desktop Qt 5.13.0 MinGW 64-bit)
When executing step "Make"
07:29:37: Temps écoulé : 00:01.
Cordialement,
Marc
Partager