1*cfa1d499SZachary Turner // Build with "cl.exe /Z7 /GR- /GS- /GX- every-class.cpp /link /debug:full /nodefaultlib /incremental:no /entry:main" 2*cfa1d499SZachary Turner 3*cfa1d499SZachary Turner #include <stdint.h> 4*cfa1d499SZachary Turner 5*cfa1d499SZachary Turner // clang-format off 6*cfa1d499SZachary Turner void *__purecall = 0; 7*cfa1d499SZachary Turner operator delete(void *,unsigned int)8*cfa1d499SZachary Turnervoid __cdecl operator delete(void *, unsigned int) {} operator delete(void *,unsigned __int64)9*cfa1d499SZachary Turnervoid __cdecl operator delete(void *, unsigned __int64) {} 10*cfa1d499SZachary Turner 11*cfa1d499SZachary Turner struct Nothing {}; ConstructorConstructor12*cfa1d499SZachary Turnerstruct Constructor { Constructor() {} }; 13*cfa1d499SZachary Turner struct Assignment { operator =Assignment14*cfa1d499SZachary Turner Assignment &operator=(Assignment Other) { return *this; } 15*cfa1d499SZachary Turner }; 16*cfa1d499SZachary Turner struct Cast { operator intCast17*cfa1d499SZachary Turner operator int() { return 42; } 18*cfa1d499SZachary Turner }; 19*cfa1d499SZachary Turner 20*cfa1d499SZachary Turner struct Nested { 21*cfa1d499SZachary Turner struct F {}; 22*cfa1d499SZachary Turner }; 23*cfa1d499SZachary Turner struct Operator { operator +Operator24*cfa1d499SZachary Turner int operator+(int X) { return 42; } 25*cfa1d499SZachary Turner }; 26*cfa1d499SZachary Turner 27*cfa1d499SZachary Turner class Class {}; 28*cfa1d499SZachary Turner 29*cfa1d499SZachary Turner union Union {}; 30*cfa1d499SZachary Turner 31*cfa1d499SZachary Turner enum class Enum {A}; 32*cfa1d499SZachary Turner 33*cfa1d499SZachary Turner f(T t)34*cfa1d499SZachary Turnertemplate<typename T> void f(T t) {} 35*cfa1d499SZachary Turner main(int argc,char ** argv)36*cfa1d499SZachary Turnerint main(int argc, char **argv) { 37*cfa1d499SZachary Turner struct Scoped {}; 38*cfa1d499SZachary Turner 39*cfa1d499SZachary Turner struct { } Anonymous; 40*cfa1d499SZachary Turner 41*cfa1d499SZachary Turner f(Nothing{}); 42*cfa1d499SZachary Turner f(Constructor{}); 43*cfa1d499SZachary Turner f(Assignment{}); 44*cfa1d499SZachary Turner f(Cast{}); 45*cfa1d499SZachary Turner f(Nested{}); 46*cfa1d499SZachary Turner f(Operator{}); 47*cfa1d499SZachary Turner f(Nested::F{}); 48*cfa1d499SZachary Turner f(Scoped{}); 49*cfa1d499SZachary Turner f(Class{}); 50*cfa1d499SZachary Turner f(Union{}); 51*cfa1d499SZachary Turner f(Anonymous); 52*cfa1d499SZachary Turner f(Enum::A); 53*cfa1d499SZachary Turner 54*cfa1d499SZachary Turner 55*cfa1d499SZachary Turner f<const Nothing>(Nothing{}); 56*cfa1d499SZachary Turner f<volatile Nothing>(Nothing{}); 57*cfa1d499SZachary Turner f<const volatile Nothing>(Nothing{}); 58*cfa1d499SZachary Turner f<__unaligned Nothing>(Nothing{}); 59*cfa1d499SZachary Turner 60*cfa1d499SZachary Turner return 0; 61*cfa1d499SZachary Turner } 62