内部に未定義のクラスを持つ CRTP クラスを作成しようとしています --- 派生クラスによって定義されるように、次のようにします。
#include <memory> // unique_ptr
template<typename T>
class crtp
{
public:
class inside;
crtp();
std::unique_ptr<inside> m;
};
これは、テンプレート化されていないデータ型で機能します。
ただし、たとえば、テンプレート化されたクラスを渡そうとすると、次のようになります。
template<>
template<typename T>
class crtp<test::TestClass<T>>::inside
{
public:
inside()
{
std::cout << "Instantiated." << std::endl;
}
};
次のエラーが発生します。
error: invalid class name in declaration of ‘class crtp<test::TestClass<T> >::inside’
gcc 4.6.1 を使用しています。
ここで何が欠けていますか?テンプレートがインスタンス化される方法と関係があるように感じますが、何を探すべきかわかりません。
編集: 明確にするために、crtp のコンストラクターなどは既に別の場所で定義されています (投稿する必要がありますか?それは unique_ptr を初期化するだけです)。私が専門化しなければならない唯一のことは、内部クラスの定義です。