1 // Compile with "cl /c /Zi /GR- symbolformat.cpp" 2 // Compile symbolformat-fpo.cpp (see file for instructions) 3 // Link with "link symbolformat.obj symbolformat-fpo.obj /debug /nodefaultlib 4 // /entry:main /out:symbolformat.exe" 5 6 int __cdecl _purecall(void) { return 0; } 7 8 enum TestEnum { 9 Value, 10 Value10 = 10 11 }; 12 13 enum class TestEnumClass { 14 Value, 15 Value10 = 10 16 }; 17 18 struct A { 19 virtual void PureFunc() = 0 {} 20 virtual void VirtualFunc() {} 21 void RegularFunc() {} 22 }; 23 24 struct VirtualBase { 25 }; 26 27 struct B : public A, protected virtual VirtualBase { 28 void PureFunc() override {} 29 }; 30 31 struct MemberTest { 32 enum NestedEnum { 33 FirstVal, 34 SecondVal 35 }; 36 37 typedef int NestedTypedef; 38 39 NestedEnum m_nested_enum; 40 NestedTypedef m_typedef; 41 bool m_bool; 42 char m_char; 43 wchar_t m_wchar_t; 44 int m_int; 45 unsigned m_unsigned; 46 long m_long; 47 unsigned long m_unsigned_long; 48 __int64 m_int64; 49 unsigned __int64 m_unsigned_int64; 50 float m_float; 51 double m_double; 52 void (*m_pfn_2_args)(int, double); 53 }; 54 55 typedef int IntType; 56 typedef A ClassAType; 57 58 int main(int argc, char **argv) { 59 // Force symbol references so the linker generates debug info 60 B b; 61 MemberTest members; 62 auto PureAddr = &B::PureFunc; 63 auto VirtualAddr = &A::PureFunc; 64 auto RegularAddr = &A::RegularFunc; 65 TestEnum Enum = Value; 66 TestEnumClass EnumClass = TestEnumClass::Value10; 67 IntType Int = 12; 68 ClassAType *ClassA = &b; 69 return 0; 70 } 71