gpt4 book ai didi

c++ - 尾随返回类型中的占位符是否会覆盖初始占位符?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:14 24 4
gpt4 key购买 nike

g++ 似乎接受 autodecltype(auto) 的任意组合作为初始和尾随返回类型:

int a;
auto f() { return (a); } // int
auto g() -> auto { return (a); } // int
auto h() -> decltype(auto) { return (a); } // int&
decltype(auto) i() { return (a); } // int&
decltype(auto) j() -> auto { return (a); } // int
decltype(auto) k() -> decltype(auto) { return (a); } // int&

但是,clang 拒绝 jk,说:error: function with trailing return type must specify return type 'auto', not 'decltype(auto )' ( demonstration ).

哪个编译器是正确的?在每种情况下应使用哪个规则(autodecltype(auto))?在 trailing-return-type 中使用占位符类型是否有意义?

最佳答案

auto 在引入 trailing-return-type 时是必需的。

§8.3.5 [dcl.fct]/2

In a declaration T D where D has the form

D1 ( parameter-declaration-clause ) cv-qualifier-seqopt ref-qualifieropt exception-specificationopt attribute-specifier-seqopt trailing-return-type

and the type of the contained declarator-id in the declaration T D1 is “derived-declarator-type-list T”,

T 应为单个类型说明符 auto。 [...]

另见 Core Issue 1852与 [dcl.spec.auto]/1 明显矛盾。

关于c++ - 尾随返回类型中的占位符是否会覆盖初始占位符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24259947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com