5
下のエラーがg++
の下で正常に動作コード、ですが、VC++ 2014
の下にエラーを与える:テンプレートコードGの下で正常に動作しますが、ここ++ VC++
template <class A>
struct Expression
{
public:
static const int status = A::status_;
};
struct Foo : public Expression<Foo>
{
static const int status_ = 0;
};
int main(void) {
return 0;
}
なぜ?ありがとう!
エラーメッセージは次のとおり
エラーC2039: 'ステータス:': 'ステータス:':宣言されていない識別子
エラーC2131 'foo' で
エラーC2065のメンバーではありません。式は定数に評価されませんでした
ClangとICCはこのコードも拒否しています。おそらく、GCCはテンプレートをまったく使用しないため、テンプレートをインスタンス化していないだけです。そのオプティマイザはかなりスマートです。それはすべてのコードが 'return 0'であることを知っています。 –
@CodyGray 'A'は' Expression'の中の不完全な型だと思うので、それは*スマートな最適化の問題ではありませんか? –
@piotrテンプレートのどれも使用されておらず、プログラムを 'main'関数に変換するだけで全面的に混乱することがわかっていれば、それはかなり賢いと思います。あなたのマイレージは異なる場合があります。 :-) –