属性说明符序列是否继承?

gez*_*eza 19 c++ language-lawyer c++11 c++14 c++17

看看这个片段:

struct [[nodiscard]] Result {
};


struct DiscardableResult: Result {
};
Run Code Online (Sandbox Code Playgroud)

是否DiscardableResult[[nodiscard]]属性?如果是,是否有可能以某种方式将其删除?

Nic*_*las 15

[dcl.attr.nodiscard]/2说:

一个nodiscard呼叫是一个函数调用表达式调用先前声明的函数nodiscard,或者其返回类型是标志着一个可能被cv修饰类或枚举类型nodiscard.

函数的返回类型是DiscardableResult.此类型未标记nodiscard,如[dcl.attr.grammar]/5中所定义:

每个属性说明符-seq被认为属于某个实体或语句,由它出现句法上下文标识(第9条,第10条,第11条).如果属于某个实体或语句的attribute-specifier-seq包含不允许应用于该实体或语句的属性或alignment-specifier,则该程序格式错误.如果属性说明符-seq附属于朋友声明(14.3),则该声明应为定义.没有attribute-specifier-seq属于显式实例化(17.7.2).

强调补充说.

在"语法上下文"中没有属性DiscardableResult.因此,该实体没有属性"附属".

属性不会被继承.