1 #include <limits>
2 
3 enum Enum {
4   enum_case1 = 1,
5   enum_case2 = 2,
6 };
7 
8 enum class ScopedEnum {
9   scoped_enum_case1 = 1,
10   scoped_enum_case2 = 2,
11 };
12 
13 enum class ScopedCharEnum : char {
14   case1 = 1,
15   case2 = 2,
16 };
17 
18 enum class ScopedLongLongEnum : long long {
19   case0 = std::numeric_limits<long long>::min(),
20   case1 = 1,
21   case2 = std::numeric_limits<long long>::max(),
22 };
23 
24 struct A {
25   const static int int_val = 1;
26   const static int int_val_with_address = 2;
27   const static bool bool_val = true;
28 
29   const static auto char_max = std::numeric_limits<signed char>::max();
30   const static auto uchar_max = std::numeric_limits<unsigned char>::max();
31   const static auto int_max = std::numeric_limits<int>::max();
32   const static auto uint_max = std::numeric_limits<unsigned>::max();
33   const static auto long_max = std::numeric_limits<long>::max();
34   const static auto ulong_max = std::numeric_limits<unsigned long>::max();
35   const static auto longlong_max = std::numeric_limits<long long>::max();
36   const static auto ulonglong_max =
37       std::numeric_limits<unsigned long long>::max();
38 
39   const static auto char_min = std::numeric_limits<char>::min();
40   const static auto uchar_min = std::numeric_limits<unsigned char>::min();
41   const static auto int_min = std::numeric_limits<int>::min();
42   const static auto uint_min = std::numeric_limits<unsigned>::min();
43   const static auto long_min = std::numeric_limits<long>::min();
44   const static auto ulong_min = std::numeric_limits<unsigned long>::min();
45   const static auto longlong_min = std::numeric_limits<long long>::min();
46   const static auto ulonglong_min =
47       std::numeric_limits<unsigned long long>::min();
48 
49   const static Enum enum_val = enum_case2;
50   const static Enum invalid_enum_val = static_cast<Enum>(enum_case2 + 5);
51   const static ScopedEnum scoped_enum_val = ScopedEnum::scoped_enum_case2;
52   const static ScopedEnum invalid_scoped_enum_val = static_cast<ScopedEnum>(5);
53   const static ScopedCharEnum scoped_char_enum_val = ScopedCharEnum::case2;
54   const static ScopedLongLongEnum scoped_ll_enum_val_neg =
55       ScopedLongLongEnum::case0;
56   const static ScopedLongLongEnum scoped_ll_enum_val =
57       ScopedLongLongEnum::case2;
58 };
59 
60 const int A::int_val_with_address;
61 
62 struct ClassWithOnlyConstStatic {
63   const static int member = 3;
64 };
65 
66 struct ClassWithConstexprs {
67   constexpr static int member = 2;
68   constexpr static Enum enum_val = enum_case2;
69   constexpr static ScopedEnum scoped_enum_val = ScopedEnum::scoped_enum_case2;
70 } cwc;
71 
72 struct ClassWithEnumAlias {
73   using EnumAlias = ScopedEnum;
74   static constexpr EnumAlias enum_alias = ScopedEnum::scoped_enum_case2;
75 
76   using EnumAliasAlias = EnumAlias;
77   static constexpr EnumAliasAlias enum_alias_alias =
78       ScopedEnum::scoped_enum_case1;
79 };
80 
main()81 int main() {
82   A a;
83 
84   auto char_max = A::char_max;
85   auto uchar_max = A::uchar_max;
86   auto int_max = A::int_max;
87   auto uint_max = A::uint_max;
88   auto long_max = A::long_max;
89   auto ulong_max = A::ulong_max;
90   auto longlong_max = A::longlong_max;
91   auto ulonglong_max = A::ulonglong_max;
92 
93   auto char_min = A::char_min;
94   auto uchar_min = A::uchar_min;
95   auto int_min = A::int_min;
96   auto uint_min = A::uint_min;
97   auto long_min = A::long_min;
98   auto ulong_min = A::ulong_min;
99   auto longlong_min = A::longlong_min;
100   auto ulonglong_min = A::ulonglong_min;
101 
102   int member_copy = ClassWithOnlyConstStatic::member;
103 
104   Enum e = A::enum_val;
105   e = A::invalid_enum_val;
106   ScopedEnum se = A::scoped_enum_val;
107   se = A::invalid_scoped_enum_val;
108   ScopedCharEnum sce = A::scoped_char_enum_val;
109   ScopedLongLongEnum sle = A::scoped_ll_enum_val;
110 
111   auto enum_alias_val = ClassWithEnumAlias::enum_alias;
112   auto enum_alias_alias_val = ClassWithEnumAlias::enum_alias_alias;
113 
114   return 0; // break here
115 }
116