Я пытаюсь определить, можно ли объявить функцию С++ таким образом, чтобы возвращаемое значение не могло быть проигнорировано (идеально определено во время компиляции). Я попытался объявить класс с private
(или в С++ 11, delete
d) operator void()
, чтобы попытаться поймать неявное преобразование в void, когда возвращаемое значение не используется.
Вот пример программы:
class Unignorable {
operator void();
};
Unignorable foo()
{
return Unignorable();
}
int main()
{
foo();
return 0;
}
К сожалению, мой компилятор (clang-703.0.31) говорит:
test.cpp:2:5: warning: conversion function converting 'Unignorable' to 'void' will never be used
operator void();
^
и не вызывает никаких ошибок или предупреждений при вызове foo()
. Так что это не сработает. Есть ли другой способ сделать это? Ответы, специфичные для С++ 11 или С++ 14 или более поздних версий, будут прекрасными.