2017-11-03 1 views
17

봐 :속성 지정자 시퀀스가 ​​상속합니까? 이 조각에서

struct [[nodiscard]] Result { 
}; 


struct DiscardableResult: Result { 
}; 

DiscardableResult[[nodiscard]] 속성이 있습니까? 그렇다면 어떻게 든 그것을 제거 할 수 있습니까?

+0

표준에는 특성이 상속된다는 내용이 없으므로 일반적으로 특성이 상속되지 않는다고 가정해야합니다. 표준은 또한'nodiscard'가 상속 받았다고 말하지 않습니다. – Brian

+0

gcc와'-std-C++ 1z'가있는 clang은 속성을 상속하지 않는 것 같습니다. – bolov

답변

12

[dcl.attr.nodiscard/2는 말한다 :

nodiscard 호출이 기능은 이전에 그 반환 타입 가능성이 이력서 자격을 갖춘 클래스 또는 열거 nodiscard, 또는 선언 호출하는 함수 호출 표현이다 유형은 nodiscard입니다.

함수의 반환 유형은 DiscardableResult입니다./5 dcl.attr.grammar]에 정의 된이 유형은 nodiscard 표시되지 않은 각 속성 지정자-SEQ 일부 엔티티 또는 문에 속하다라고

통사 문맥 식별 곳을 (9 절, 10 절, 11 절)이 나타납니다. 어떤 엔티티 또는 문장에 속하는 attribute-specifier-seq가 해당 엔티티 또는 문장에 적용 할 수없는 속성 또는 정렬 지정자를 포함하면 프로그램이 잘못 구성됩니다. attribute-specifier-seq가 friend 선언 (14.3)에 속하면 그 선언은 정의가됩니다. attribute-specifier-seq는 명시 적 인스턴스화 (17.7.2)에 속하지 않습니다.

강조가 추가되었습니다.

의 "의미 문맥"에 특성이 없습니다. 따라서이 엔티티에는 "appertains"속성이 없습니다.

속성은 상속되지 않습니다.

관련 문제