Rae*_*ani 3 c++ templates partial-specialization sfinae c++14
我有一个程序如下.有一个基本模板struct X和SFINAE的部分专业化.
template <typename T, typename U = void>
struct X{
X() {
std::cout << "in 1" << std::endl;
};
};
template <typename T>
struct X< T, std::enable_if_t<std::is_integral_v<T>> > {
X() {
std::cout << "in 2" << std::endl;
};
};
int main() {
X<int> x;
}
Run Code Online (Sandbox Code Playgroud)
运行程序时in 2打印.
为什么第二个专业化被选为第一个专业化,因为它们都有效地声明了一个struct X<int, void>.什么 std::enable_if_t<std::is_integral_v<T>>比基本模板中显示的默认模板类型参数更专业?
为什么基本模板的默认类型参数必须与要调用和in 2打印的部分特化的部分特化定义的类型相同.为什么要更改以调用std::enable_if_t<std::is_integral_v<T>, bool>基本模板in 1?