10 Declarations [dcl.dcl]

10.6 Attributes [dcl.attr]

10.6.7 Nodiscard attribute [dcl.attr.nodiscard]

attribute-token nodiscard Может быть применен к declarator-id в объявлении функции или к объявлению класса или перечисления. Он должен появляться не более одного раза в каждом attribute-listи не attribute-argument-clauseдолжен присутствовать.

[ Note: Вызов nodiscard - это выражение вызова функции, которое вызывает ранее объявленную функцию nodiscardили возвращаемый тип которой, возможно, является классом с квалификацией cv или отмеченным типом перечисления nodiscard. Появление вызова nodiscard как потенциально оцененного выражения отбрасываемого значения (пункт [expr]) не приветствуется, если явно не приведено к void. Реализациям рекомендуется выдавать предупреждение в таких случаях. Обычно это происходит из-за того, что отказ от возвращаемого значения вызова nodiscard имеет неожиданные последствия. ]end note

[Example:

struct [[nodiscard]] error_info { /* ... */ };
error_info enable_missile_safety_mode();
void launch_missiles();
void test_missiles() {
  enable_missile_safety_mode(); // warning encouraged
  launch_missiles();
}
error_info &foo();
void f() { foo(); }             // warning not encouraged: not a nodiscard call, because neither
                                // the (reference) return type nor the function is declared nodiscard

end example]