小编Rae*_*ani的帖子

使用默认参数的模板特化

我有一个程序如下.有一个基本模板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打印.

  1. 为什么第二个专业化被选为第一个专业化,因为它们都有效地声明了一个struct X<int, void>.什么 std::enable_if_t<std::is_integral_v<T>>比基本模板中显示的默认模板类型参数更专业?

  2. 为什么基本模板的默认类型参数必须与要调用和in 2打印的部分特化的部分特化定义的类型相同.为什么要更改以调用std::enable_if_t<std::is_integral_v<T>, bool>基本模板in 1

c++ templates partial-specialization sfinae c++14

3
推荐指数
1
解决办法
264
查看次数

标签 统计

c++ ×1

c++14 ×1

partial-specialization ×1

sfinae ×1

templates ×1