Vit*_*meo 4 c++ attributes friend-function language-lawyer c++17
以下代码段:
struct a
{
[[nodiscard]] friend int b();
};
Run Code Online (Sandbox Code Playgroud)
产生在编译时这个错误clang++ (trunk 342102)
有-std=c++17
:
<source>:3:5: error: an attribute list cannot appear here
[[nodiscard]] friend int b();
^~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
删除friend
或添加正文以b
防止错误.
g++ (trunk)
编译代码就好了.
关于godbolt的实例:https://gcc.godbolt.org/z/ttTDuZ
这是一个clang++
错误吗?或者标准中是否有一些规则使得此代码格式错误?
如果clang++
是正确的,将friend
成员函数标记为什么的正确方法是[[nodiscard]]
什么?
每个属性说明符-seq被认为属于某个实体或语句,由它出现的句法上下文([stmt.stmt],[dcl.dcl],[dcl.decl])标识.如果属于某个实体或语句的attribute-specifier-seq包含不允许应用于该实体或语句的属性或alignment-specifier,则该程序格式错误.如果属性说明符 -seq属于朋友声明,则该声明应为定义.没有attribute-specifier-seq应该与显式实例化有关.
强调我的
所以,铿锵就在这里.如果您有一个属性,则该函数必须具有定义(如果它是友元函数).
归档时间: |
|
查看次数: |
111 次 |
最近记录: |