1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <vector> #include <algorithm> #include <cassert> const // this is a const object... class { public: template<class T> // convertible to any type operator T*() const // of null non-member { return 0; } // pointer... template<class C, class T> // or any type of null operator T C::*() const // member pointer... { return 0; } void operator&() const = delete; // whose address can't be taken } nullptr = {}; int main() { int* ptr = NULL; assert( nullptr == ptr ); } |
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNhc3NlcnQ+Cgpjb25zdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBjb25zdCBvYmplY3QuLi4KY2xhc3MgewpwdWJsaWM6CiAgdGVtcGxhdGU8Y2xhc3MgVD4gICAgICAgICAgLy8gY29udmVydGlibGUgdG8gYW55IHR5cGUKICAgIG9wZXJhdG9yIFQqKCkgY29uc3QgICAgICAvLyBvZiBudWxsIG5vbi1tZW1iZXIKICAgIHsgcmV0dXJuIDA7IH0gICAgICAgICAgICAvLyBwb2ludGVyLi4uCiAgdGVtcGxhdGU8Y2xhc3MgQywgY2xhc3MgVD4gLy8gb3IgYW55IHR5cGUgb2YgbnVsbAogICAgb3BlcmF0b3IgVCBDOjoqKCkgY29uc3QgIC8vIG1lbWJlciBwb2ludGVyLi4uCiAgICB7IHJldHVybiAwOyB9CgogIHZvaWQgb3BlcmF0b3ImKCkgY29uc3QgPSBkZWxldGU7ICAgIC8vIHdob3NlIGFkZHJlc3MgY2FuJ3QgYmUgdGFrZW4KfSBudWxscHRyID0ge307ICAgICAgIAoKaW50IG1haW4oKQp7CiAgIGludCogcHRyID0gTlVMTDsKICAgYXNzZXJ0KCBudWxscHRyID09IHB0ciApOwp9
prog.cpp: In function 'int main()': prog.cpp:21:4: error: no match for 'operator==' in 'nullptr == ptr'
-
result: Compilation error (maybe you wish to see an example for C++11)


