#include <iostream>
#define implies ->* implies_impl ? true :
struct implies_impl_t {
} const implies_impl = {};
template<typename T>
bool operator->*(T const & t, implies_impl_t) {
return !static_cast<bool>(t);
}
int main() {
using std::cout;
cout << (1 implies 1) << '\n';
cout << (1 implies 0) << '\n';
cout << (0 implies 1) << '\n';
cout << (0 implies 0) << '\n';
}