模板偏特化可以缩小 C++ 中的参数类型吗?

Can template partial specialization narrow the argument type in C++?

在下一个程序中,struct template 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
}
error C2753: 'A<c>': partial specialization cannot match argument list for primary template

演示:https://gcc.godbolt.org/z/Ef95jv5E5

这里是哪个编译器?

活动的 CWG issue 1647 恰好提到了将 int 非类型模板参数特化为 char.

的情况

它还提到该标准目前缺少措辞来处理主模板中的非类型模板参数与其偏特化之间的类型不匹配,并且在这个问题上存在实现分歧。