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
operator delete(void *,unsigned int)8 void __cdecl operator delete(void *,unsigned int) {}
operator delete(void *,unsigned __int64)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
f(T t)88 template<typename T> void f(T t) {}
89
main(int argc,char ** argv)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