Оказывается, в С++ можно объявить оператор каста к... void.
struct X {
// warning: Conversion function converting 'X' to 'void' will never be used
operator void() { std::cerr << "void\n"; }
};
Да, он ворнингом скажет, что ты никогда не сможешь его использовать, но объявить, и даже скомпилировать - это запросто.
Но самая большая радость... При должном желании и упорстве, вопреки предупреждениям ворнинга, вы таки сможете это запустить:
#include <iostream>
struct X {
// warning: Conversion function converting 'X' to 'void' will never be used
operator void() { std::cerr << "void\n"; }
};
int main(int argc, char *argv[]) {
X x;
(void)x; // no
static_cast<void>(x); // no
x.operator void(); // YES!!!
return 0;
}
И вот это уже вообще взрыв мозга! 🤯