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
浮云间
偶然的你
慕桂英4014372
相关分类