Bonjour,

Je voudrais creer une classe de trait et heriter de cette classe, un classe avec un template template parameter, mais celui ci pose probleme lorsque j'utilise cette classe de base pour utiliser explicitement un typedef de la classe de base dans la declaration de la classe qui en herite ... Oui l'enoncé est compliqué mais il est precis alors j'ai collé a la fin un code simplifié du probleme pour que ce soit plus clair.

L'erreur de Visual Studio 2010 RC, j'ai quelques choses de similaire avec GCC 4.4 et VC 2005:
error C3200: 'base<N,T>' : invalid template argument for template parameter 'C', expected a class template

Sous Visual Studio je peux utilise value_type directement a la place de typename trait<N, T, base>::value_type mais pas sous GCC.

Une idée ?

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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
template 
<
	std::size_t N, 
	typename T, 
	template
	<
		std::size_t, 
		typename
	> class C
>
struct trait
{
	typedef T value_type;
	typedef std::size_t size_type;
	static size_type const value_size;
};
 
template 
<
	std::size_t N, 
	typename T, 
	template
	<
		std::size_t N2, 
		typename T2
	> class C
>
typename trait<N, T, C>::size_type const trait<N, T, C>::value_size = N;
 
template <std::size_t N, typename T>
struct base : public trait<N, T, base>
{
	typename trait<N, T, vecDEV>::value_type Data[trait<N, T, base>::value_size];
};