1

可能重复:
C++0x static_assert 和模板实例化

由于以下原因,以下代码无法在 GCC 中编译static_assert

#include <ratio>
#include <iostream>

template<typename T>
class A
{
public:
    const static T a = 10;
    A() 
    {
        static_assert(false, "Can't instantiate this");
    }
};


int main() 
{
    A<int>::a;
    return 0;
}

( http://ideone.com/3opRfQ )

但是,相同的代码在 Visual Studio 2012 中编译。如果我实际实例化该类,我只会收到编译错误(此外,如果我将类设为非模板化,则会触发 static_assert 而不实例化该类)。

哪个编译器的行为符合标准?我认为是 GCC,但我在标准中看不到明确的确认。

4

0 回答 0