template <int answer> struct Hitchhiker {
static_assert(sizeof(answer) != sizeof(answer), "Invalid answer");
};
template <> struct Hitchhiker<42> {};
在尝试禁用通用模板实例化时,static_assert
我发现clang
即使模板未实例化,上述代码也会生成断言错误,而gcc
仅在Hitchhiker
使用42
.
摆弄我发现这个断言:
template <int answer> struct Hitchhiker {
static_assert(sizeof(int[answer]) != sizeof(int[answer]), "Invalid answer");
};
template <> struct Hitchhiker<42> {};
在两个编译器上的行为相同:断言仅在通用模板被实例化时才生效。
标准是怎么说的,哪个编译器是正确的?
g++ 4.9.2
clang++ 3.50