Иногда функция возвращает значение, которое нельзя просто проигнорировать: статус операции, ошибку, открытый ресурс, результат валидации.
Например:
bool save_config() {
return write_file("config.json");
}
save_config();Код компилируется, но результат потерян. Если сохранение не удалось, программа может продолжить работу так, будто всё нормально.
Для таких случаев есть атрибут [[nodiscard]]:
[[nodiscard]]
bool save_config() {
return write_file("config.json");
}
Теперь компилятор предупредит, если результат вызова проигнорировали:
save_config(); // warning
Правильнее явно обработать результат:
if (!save_config()) {
std::cerr << "Config was not saved\n";
}Особенно полезно помечать функции, которые возвращают объект ошибки:
[[nodiscard]]
std::optional<User> find_user(int id);
Или результат проверки:
[[nodiscard]]
bool is_valid_token(std::string_view token);
Если результат действительно нужно проигнорировать, лучше показать это явно:
(void)save_config();
Так сразу видно, что разработчик сделал это осознанно, а не случайно.



