次のコードは、次の理由により 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;
}
ただし、同じコードが Visual Studio 2012 でコンパイルされます。クラスを実際にインスタンス化した場合にのみコンパイル エラーが発生します (また、クラスを非テンプレート化すると、クラスをインスタンス化せずに static_assert がトリガーされます)。
標準に従って動作しているコンパイラはどれですか? GCCだと思いますが、標準に明確な確認が見られません。