tgoop.com/cxx95/71
Create:
Last Update:
Last Update:
#creepy
Как обмануть [[nodiscard]] через std::ignore
В C++17 добавили атрибут [[nodiscard]], которым можно помечать функции, чтобы тот, кто вызвал функцию, не игнорировал возвращаемое значение.
Во многих окружениях любой warning ломает компиляцию (с флагом -Werror
). Можно ли все-таки проигнорировать значение?
Оказывается - да
[[nodiscard]] int status_code() { return -1; }Но в духе C++ будет запретить
[[nodiscard]] std::string sample_text() { return "hello world"; }
void foo() {
std::ignore = status_code(); // нет warning/error
std::ignore = sample_text(); // нет warning/error
}
std::ignore
для некоторых типов. Покопавшись в реализации, можно выключить его, например для int
:template<>Пример на godbolt
const decltype(std::ignore)&
decltype(std::ignore)::operator=(const int&) const = delete;