1*c41ce835SZachary Turner // Build with "cl.exe /Zi /GR- /GX- every-pointer.cpp /link /debug /nodefaultlib /incremental:no /entry:main" 2*c41ce835SZachary Turner 3*c41ce835SZachary Turner #include <stdint.h> 4*c41ce835SZachary Turner 5*c41ce835SZachary Turner // clang-format off 6*c41ce835SZachary Turner void *__purecall = 0; 7*c41ce835SZachary Turner operator delete(void *,unsigned int)8*c41ce835SZachary Turnervoid __cdecl operator delete(void *,unsigned int) {} operator delete(void *,unsigned __int64)9*c41ce835SZachary Turnervoid __cdecl operator delete(void *,unsigned __int64) {} 10*c41ce835SZachary Turner 11*c41ce835SZachary Turner 12*c41ce835SZachary Turner struct Foo { 13*c41ce835SZachary Turner int X = 0; funcFoo14*c41ce835SZachary Turner int func() { return 42; } 15*c41ce835SZachary Turner }; 16*c41ce835SZachary Turner 17*c41ce835SZachary Turner int *IntP = nullptr; 18*c41ce835SZachary Turner Foo *FooP = nullptr; 19*c41ce835SZachary Turner 20*c41ce835SZachary Turner Foo F; 21*c41ce835SZachary Turner 22*c41ce835SZachary Turner Foo __unaligned *UFooP = &F; 23*c41ce835SZachary Turner Foo * __restrict RFooP = &F; 24*c41ce835SZachary Turner 25*c41ce835SZachary Turner const Foo * CFooP = &F; 26*c41ce835SZachary Turner volatile Foo * VFooP = &F; 27*c41ce835SZachary Turner const volatile Foo * CVFooP = &F; 28*c41ce835SZachary Turner f(T t)29*c41ce835SZachary Turnertemplate<typename T> void f(T t) {} 30*c41ce835SZachary Turner main(int argc,char ** argv)31*c41ce835SZachary Turnerint main(int argc, char **argv) { 32*c41ce835SZachary Turner f<int*>(IntP); 33*c41ce835SZachary Turner f<Foo*>(FooP); 34*c41ce835SZachary Turner 35*c41ce835SZachary Turner f<Foo __unaligned *>(UFooP); 36*c41ce835SZachary Turner f<Foo *__restrict>(RFooP); 37*c41ce835SZachary Turner 38*c41ce835SZachary Turner f<const Foo*>(CFooP); 39*c41ce835SZachary Turner f<volatile Foo*>(VFooP); 40*c41ce835SZachary Turner f<const volatile Foo*>(CVFooP); 41*c41ce835SZachary Turner 42*c41ce835SZachary Turner f<Foo&>(F); 43*c41ce835SZachary Turner f<Foo&&>(static_cast<Foo&&>(F)); 44*c41ce835SZachary Turner 45*c41ce835SZachary Turner f(&Foo::X); 46*c41ce835SZachary Turner f(&Foo::func); 47*c41ce835SZachary Turner return 0; 48*c41ce835SZachary Turner } 49