1 // Build with "cl.exe /Zi /GR- /GX- every-enum.cpp /link /debug /nodefaultlib /incremental:no /entry:main" 2 3 #include <stdint.h> 4 5 // clang-format off 6 void *__purecall = 0; 7 8 void __cdecl operator delete(void *,unsigned int) {} 9 void __cdecl operator delete(void *,unsigned __int64) {} 10 11 12 enum I8 : int8_t { 13 I8A = INT8_MIN, 14 I8B = 0, 15 I8C = INT8_MAX 16 }; 17 18 enum I16 : int16_t { 19 I16A = INT16_MIN, 20 I16B = 0, 21 I16C = INT16_MAX, 22 }; 23 24 enum I32 : int32_t { 25 I32A = INT32_MIN, 26 I32B = 0, 27 I32C = INT32_MAX, 28 }; 29 30 enum I64 : int64_t { 31 I64A = INT64_MIN, 32 I64B = 0, 33 I64C = INT64_MAX, 34 }; 35 36 enum U8 : uint8_t { 37 U8A = 0, 38 U8B = UINT8_MAX 39 }; 40 41 enum U16 : uint16_t { 42 U16A = 0, 43 U16B = UINT16_MAX, 44 }; 45 46 enum U32 : uint32_t { 47 U32A = 0, 48 U32B = UINT32_MAX, 49 }; 50 51 enum U64 : uint64_t { 52 U64A = 0, 53 U64B = UINT64_MAX, 54 }; 55 56 enum Char16 : char16_t { 57 C16A = u'a', 58 C16B = u'b', 59 }; 60 61 enum Char32 : char32_t { 62 C32A = U'a', 63 C32B = U'b', 64 }; 65 66 enum WChar : wchar_t { 67 WCA = L'a', 68 WCB = L'b', 69 }; 70 71 enum Bool : bool { 72 BA = true, 73 BB = false 74 }; 75 76 enum class EC { 77 A = 1, 78 B = 2 79 }; 80 81 struct Struct { 82 enum Nested { 83 A = 1, 84 B = 2 85 }; 86 }; 87 88 template<typename T> void f(T t) {} 89 90 int main(int argc, char **argv) { 91 f(I8A); 92 f(I16A); 93 f(I32A); 94 f(I64A); 95 f(U8A); 96 f(U16A); 97 f(U32A); 98 f(U64A); 99 100 f(C16A); 101 f(C32A); 102 f(WCA); 103 f(BA); 104 105 106 f(EC::A); 107 f(Struct::A); 108 109 f<const volatile EC>(EC::A); 110 } 111