ルック:DiscardableResult
は[[nodiscard]]
属性を属性指定子シーケンスは継承していますか?このスニペットで
struct [[nodiscard]] Result {
};
struct DiscardableResult: Result {
};
を持っていますか?はいの場合は、何とか削除することは可能ですか?
ルック:DiscardableResult
は[[nodiscard]]
属性を属性指定子シーケンスは継承していますか?このスニペットで
struct [[nodiscard]] Result {
};
struct DiscardableResult: Result {
};
を持っていますか?はいの場合は、何とか削除することは可能ですか?
[dcl.attr.nodiscard]/2と言う:
nodiscard
コールが以前nodiscard
宣言された関数を呼び出す関数呼び出し式である、またはその戻り値の型が、おそらくCV-修飾クラスまたは列挙ですタイプnodiscard
と記されています。
戻り値の型はDiscardableResult
です。/5 [dcl.attr.grammar]で定義されているこのタイプは、nodiscard
にマークされていません:各属性指定子-seqが、いくつかのエンティティまたはステートメントにappertainと言われて
構文のコンテキストで識別される、それをどこに(第9条第10項第11項)と表示されます。あるエンティティまたはステートメントに属する属性指定子が、そのエンティティまたはステートメントに適用することが許可されていない属性または整列指定子を含んでいる場合、そのプログラムは不正です。 attribute-specifier-seqがフレンド宣言(14.3)に属する場合、その宣言は定義とする。 attribute-specifier-seqは明示的インスタンス化(17.7.2)に属さないものとする。
強調が追加されました。
「セマンティックコンテキスト」には、DiscardableResult
の属性はありません。したがって、このエンティティには「属している」属性はありません。
属性は継承されません。
標準では、属性が継承されているとは言いませんので、属性が一般的に継承されていないと仮定する必要があります。この規格は、 'nodiscard'が継承されているとも述べていません。 – Brian
gccと '-std-C++ 1z'のclangは属性を継承していないようです。 – bolov