clang vs gcc - 从模板参数派生的结构的 CTAD
clang vs gcc - CTAD of struct deriving from template parameter
考虑以下代码:
template <typename B>
struct D : B { };
D d{[]{ }};
gcc 12.x 接受它并推导出 d
为预期的 D</* type of lambda */>
。
clang 14.x 拒绝它并出现以下错误:
<source>:4:3: error: no viable constructor
or deduction guide for deduction of template arguments of 'D'
D d{[]{ }};
^
<source>:2:8: note: candidate template ignored:
could not match 'D<B>' against '(lambda at <source>:4:5)'
struct D : B { };
^
<source>:2:8: note: candidate function template not viable:
requires 0 arguments, but 1 was provided
哪个编译器在这里表现正确?
在代码片段中,没有提供推导指南。 P1816 通过要求生成 聚合推导候选 ,为 C++20 中的聚合 class 模板添加了推导指南。
代码有效,但 Clang 还 doesn't support P1816。
添加推导指南也可以compile in Clang。
template <typename B> D(B) -> D<B>;
考虑以下代码:
template <typename B>
struct D : B { };
D d{[]{ }};
gcc 12.x 接受它并推导出
d
为预期的D</* type of lambda */>
。clang 14.x 拒绝它并出现以下错误:
<source>:4:3: error: no viable constructor
or deduction guide for deduction of template arguments of 'D'
D d{[]{ }};
^
<source>:2:8: note: candidate template ignored:
could not match 'D<B>' against '(lambda at <source>:4:5)'
struct D : B { };
^
<source>:2:8: note: candidate function template not viable:
requires 0 arguments, but 1 was provided
哪个编译器在这里表现正确?
在代码片段中,没有提供推导指南。 P1816 通过要求生成 聚合推导候选 ,为 C++20 中的聚合 class 模板添加了推导指南。
代码有效,但 Clang 还 doesn't support P1816。
添加推导指南也可以compile in Clang。
template <typename B> D(B) -> D<B>;