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: '狀態_':不是 '富'
錯誤C2065的成員: '狀態_':未聲明的標識符
錯誤C2131:表達式沒有評估到一個常數
Clang和ICC都拒絕這個代碼。據推測,GCC根本就沒有實例化模板,因爲你完全不使用它們。它的優化器非常聰明;它知道所有的代碼都是'return 0'。 –
@CodyGray我猜''Expression'中的'A'是一個不完整的類型,所以它不是*「智能」*優化的問題,還是它? –
@piotr好吧,我認爲這是相當聰明的,如果它意識到沒有使用任何模板並消除整個混亂,只需將程序轉換爲'main'函數即可。你的旅費可能會改變。 :-) –