首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从模板参数导出结构的clang与gcc - CTAD

从模板参数导出结构的clang与gcc - CTAD
EN

Stack Overflow用户
提问于 2022-01-11 01:27:13
回答 1查看 176关注 0票数 3

考虑以下代码:

代码语言:javascript
复制
template <typename B>
struct D : B { };

D d{[]{ }};
  • gcc 12.x接受它,并按预期推断dD</* type of lambda */>
  • Clang14.x拒绝它,但有以下错误:
代码语言:javascript
复制
<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

godbolt.org上的实例

哪个编译器在这里运行正确?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-11 01:51:10

在代码片段中,没有提供任何扣减指南。P1816在C++20中添加了聚合类模板的扣减指南,要求生成聚合扣减候选。

代码是有效的,但是Clang只是不支持P1816

添加一个扣减指南也允许这一点到用Clang编译

代码语言:javascript
复制
template <typename B> D(B) -> D<B>;
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70660641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档