1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <type_traits> template<class Derived> struct Base{ typedef Base<Derived> MyType; Base(){ typedef char ERROR_You_screwed_up[ std::is_base_of<MyType,Derived>::value ? 1 : -1 ]; } }; class ConcreteDerived : public Base<int>{ }; int main(){ ConcreteDerived cd; } |
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKdGVtcGxhdGU8Y2xhc3MgRGVyaXZlZD4Kc3RydWN0IEJhc2V7CiAgdHlwZWRlZiBCYXNlPERlcml2ZWQ+IE15VHlwZTsKCiAgQmFzZSgpewogICAgdHlwZWRlZiBjaGFyIEVSUk9SX1lvdV9zY3Jld2VkX3VwWyBzdGQ6OmlzX2Jhc2Vfb2Y8TXlUeXBlLERlcml2ZWQ+Ojp2YWx1ZSA/IDEgOiAtMSBdOwogIH0KfTsKCmNsYXNzIENvbmNyZXRlRGVyaXZlZCA6IHB1YmxpYyBCYXNlPGludD57Cn07CgppbnQgbWFpbigpewogIENvbmNyZXRlRGVyaXZlZCBjZDsKCn0=
prog.cpp: In constructor 'Base<Derived>::Base() [with Derived = int]':
prog.cpp:12:41: instantiated from here
prog.cpp:8:88: error: creating array with negative size ('-0x000000001')
-
result: Compilation error (maybe you wish to see an example for C++11)


