在下一个程序中,struct模板A<int>具有专门化的A<char>。
template <int>
struct A { constexpr operator int() { return 1; } };
template <char c>
struct A<c> { constexpr operator int() { return 2; } };
int main() {
static_assert( A<1000>{} == 1 ); //ok in Clang and GCC
static_assert( A<1>{} == 2 ); //ok in Clang only
}A<1>{}中却忽略了这个定义。error C2753: 'A<c>': partial specialization cannot match argument list for primary template演示:https://gcc.godbolt.org/z/Ef95jv5E5
哪个编译器就在这里?
发布于 2022-01-15 10:08:04
active CWG第1647期确切地提到了将int非类型模板参数专门化为char的情况。
它还提到,该标准目前缺乏处理主模板中的非类型模板参数与它们的部分专门化之间的类型不匹配的措辞,并且在这个问题上存在实现上的分歧。
https://stackoverflow.com/questions/70720403
复制相似问题