При применении к функции атрибут [[nodiscard]]
побуждает компилятор выдавать предупреждение, если он используется в отброшенном выражении, отличном от приведения к void
.Пример:
[[nodiscard]] int callable_return_not_discardable(int n)
{ return n; }
int main()
{
callable_return_not_discardable(0); // warning/error:
// ignoring return value of 'int callable_return_not_discardable(int)',
// declared with attribute nodiscard [-Wunused-result]
(void) callable_return_not_discardable(0); // OK
}
Демонстрация в реальном времени на gcc-8 и clang-7 .
Это приятно и полезно, покадобавлен дополнительный косвенный слой: шаблоны:
template<class Callable>
void invoke_with_answer(Callable&& callable)
{ callable(42); }
[[nodiscard]] int callable_return_not_discardable(int n)
{ return n; }
int main()
{
invoke_with_answer(callable_return_not_discardable); // OK
}
Live демо на gcc-8 и clang-7 .
Мой вопросзатем:
Это отсутствующая функция, следствие того, что шаблоны должны или должны быть исправлены clang и gcc для выдачи здесь предупреждения?