5

为什么以下 CTAD 尝试编译失败?

template <typename T> struct C { C(T,T) {} };
template <> struct C<int> { C(int) {} };

C c(1);  //error: template argument deduction failure

我原以为会推导出构造函数 C(int) 。

4

1 回答 1

7

只为主模板中的构造函数生成隐式推导指南,而不为特化的构造函数生成。

您需要明确添加扣除指南:

C(int) -> C<int>;
于 2022-01-15T08:36:29.910 回答