2016-03-28 5 views
4

から派生したクラスでtypedefを参照してください有効なC++をコードするか、MSVSは正しいですか?CRTPは、私は、コードを次している基底クラス

+0

打ち鳴らすと、ここMSVCとgccのCONCUR両方。しかし、なぜ私は理解できません。 – SergeyA

+0

MSVCに回避策はありますか? –

+0

私はこの質問が以前に尋ねられたことは知っていますが、なんらかの理由で私は偽薬を見つけることができません。 – Barry

答えて

3

問題は、完全な形にする必要がありTこの時点で

template <typename T> 
class A 
{ 
    typedef typename T::Type MyType; 
        ^^^ 
}; 

です。しかし、あなたの場合には、ときA<T>が、ここでインスタンス化されます。

template <typename T> 
class B : public A<B<T>> 
       ^^^^^^^ 

B<T>がまだ完全な型ではありません!だから、残念ながらこれはうまくいかない。

簡単な解決策は、単に個別Typeに渡すことです:

template <typename T, typename Type> 
class A 
{ 
    typedef Type MyType; 
};  

template <typename T> 
class B : public A<B<T>, T> 
{ 

}; 
+0

他のコンパイラがtypedefを不完全な型で参照することは可能でしょうか? –

+0

@AlexanderBilyその他のコンパイラは? – Barry

+0

ああ、ごめんなさい –

関連する問題