首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么C++20的概念与"const &“不兼容?

为什么C++20的概念与"const &“不兼容?
EN

Stack Overflow用户
提问于 2021-05-07 18:14:06
回答 1查看 271关注 0票数 6
代码语言:javascript
复制
template<typename T>
concept Octet = 1 == sizeof(T);

// ok
Octet decltype(auto) c = 'a';

// ok
void f1(const auto&) {}

// ok
void f2(Octet auto) {}

// ok
void f3(Octet auto&&) {}

// error: expected ‘auto’ or ‘decltype(auto)’ after ‘Octet’
void f4(Octet const auto&) {}

// error: cannot declare a parameter with ‘decltype(auto)’
void f5(Octet decltype(auto)) {}

gcc-11 -std=c++20编译。请参阅:https://godbolt.org/z/xK769Pfjn

f4 f5 为什么不工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-07 18:32:43

正如在[dcl.spec.auto]中看到的,当您在这里使用占位符时,约束需要紧接在auto之前。

占位符-类型-说明符: 类型约束选择auto 类型约束选择decltype ( auto )

这只是一个语法问题。约束不是像const那样的通用说明符;它没有灵活的位置。从概念上讲,您可以将Octet auto看作一个表示受约束类型的“单词”。

至于f5,这不允许作为p2的参数:

一个占位符-类型说明符的形式“类型约束_选择auto”可以用作一个函数声明的参数声明的decl-说明符-seq的decl-说明符.

decltype(auto)不存在这样的文本。此外,每个p6:

在此子子句中不显式允许的上下文中使用占位符类型的程序格式不正确。

从逻辑上讲,我不确定如何指定decltype(auto)在此上下文中工作。当然,它可以被指定,但我不认为它的语言有先例,所以它需要被激发到一个已经达到预期效果的替代方案上。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67439885

复制
相关文章

相似问题

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