別のテンプレート化されたクラス (ここでは A) から継承し、(ここでは int var の) 静的メンバーの特殊化を実行するテンプレート化されたクラス (ここでは C) を作成しようとしていますが、これを行うための正しい構文を取得できません (可能な場合)。
#include <iostream>
template<typename derived>
class A
{
public:
static int var;
};
//This one works fine
class B
:public A<B>
{
public:
B()
{
std::cout << var << std::endl;
}
};
template<>
int A<B>::var = 9;
//This one doesn't works
template<typename type>
class C
:public A<C<type> >
{
public:
C()
{
std::cout << var << std::endl;
}
};
//template<>
template<typename type>
int A<C<type> >::var = 10;
int main()
{
B b;
C<int> c;
return 0;
}
テンプレート化されていないクラス (ここでは B) で動作する例を示します。var の静的メンバーの特殊化を取得できますが、C では動作しません。
これがgccが教えてくれることです:
test.cpp: In constructor ‘C<type>::C()’:
test.cpp:29:26: error: ‘var’ was not declared in this scope
test.cpp: At global scope:
test.cpp:34:18: error: template definition of non-template ‘int A<C<type> >::a’
私はgccバージョン4.6.3を使用しています。助けてくれてありがとう