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 ]