Bonjour,

Cela fait un petit moment que je n'ai plus touché au C++, et je peine à comprendre une erreur de compilation de G++. Le même code compile sans problème avec visual (et semble fonctionner).

Voilà l'extrait qui pause problème :
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
17
18
19
20
template <int I, int I_MAX> struct SvVLoop
	{
		template<int N, class T>
		static inline void SvV(T dt[N], T _v)
		{
			dt[I] = _v;
			SvVLoop<I + 1, I_MAX>::SvV<N, T>(dt, _v);
		}
	};
	template <int I_MAX> struct SvVLoop<I_MAX, I_MAX>
	{
		template <int N, class T>
		static inline void SvV(T dt[N], const T _v) {}
	};
	template <int N, class T>
	inline
	VectorND<N, T>::VectorND(T _v)
	{
		SvVLoop<0, N>::SvV<N, T>(dt, _v);
	}
J'ai un joli
Code : Sélectionner tout - Visualiser dans une fenêtre à part
error: expected primary-expression before '>' token
pour la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
			SvVLoop<I + 1, I_MAX>::SvV<N, T>(dt, _v);
et la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
		SvVLoop<0, N>::SvV<N, T>(dt, _v);
Le problème est que si je supprimer le "<N, T>", le compilateur m'informe qu'il ne parvient pas à trouver le modèle de fonction correspondant. (Je crois qu'il en est de même pour visual, de mémoire.)

Je ne suis pas vraiment au point avec ces histoires de méta-programmation, donc je ne comprend pas trop ce qu'il m'arrive

Une aide ne serait pas de refus