1 #include <limits> 2 3 enum Enum { 4 enum_case1 = 1, 5 enum_case2 = 2, 6 }; 7 8 enum EnumBool : bool { 9 enum_bool_case1 = false, 10 enum_bool_case2 = true, 11 }; 12 13 enum class ScopedEnum { 14 scoped_enum_case1 = 1, 15 scoped_enum_case2 = 2, 16 }; 17 18 enum class ScopedCharEnum : char { 19 case1 = 1, 20 case2 = 2, 21 }; 22 23 enum class ScopedLongLongEnum : long long { 24 case0 = std::numeric_limits<long long>::min(), 25 case1 = 1, 26 case2 = std::numeric_limits<long long>::max(), 27 }; 28 29 struct A { 30 const static int int_val = 1; 31 const static int int_val_with_address = 2; 32 inline const static int inline_int_val = 3; 33 const static bool bool_val = true; 34 35 const static auto char_max = std::numeric_limits<char>::max(); 36 const static auto schar_max = std::numeric_limits<signed char>::max(); 37 const static auto uchar_max = std::numeric_limits<unsigned char>::max(); 38 const static auto int_max = std::numeric_limits<int>::max(); 39 const static auto uint_max = std::numeric_limits<unsigned>::max(); 40 const static auto long_max = std::numeric_limits<long>::max(); 41 const static auto ulong_max = std::numeric_limits<unsigned long>::max(); 42 const static auto longlong_max = std::numeric_limits<long long>::max(); 43 const static auto ulonglong_max = 44 std::numeric_limits<unsigned long long>::max(); 45 const static auto wchar_max = std::numeric_limits<wchar_t>::max(); 46 47 const static auto char_min = std::numeric_limits<char>::min(); 48 const static auto schar_min = std::numeric_limits<signed char>::min(); 49 const static auto uchar_min = std::numeric_limits<unsigned char>::min(); 50 const static auto int_min = std::numeric_limits<int>::min(); 51 const static auto uint_min = std::numeric_limits<unsigned>::min(); 52 const static auto long_min = std::numeric_limits<long>::min(); 53 const static auto ulong_min = std::numeric_limits<unsigned long>::min(); 54 const static auto longlong_min = std::numeric_limits<long long>::min(); 55 const static auto ulonglong_min = 56 std::numeric_limits<unsigned long long>::min(); 57 const static auto wchar_min = std::numeric_limits<wchar_t>::min(); 58 59 const static Enum enum_val = enum_case2; 60 const static EnumBool enum_bool_val = enum_bool_case1; 61 const static ScopedEnum scoped_enum_val = ScopedEnum::scoped_enum_case2; 62 const static ScopedEnum not_enumerator_scoped_enum_val = static_cast<ScopedEnum>(5); 63 const static ScopedEnum not_enumerator_scoped_enum_val_2 = 64 static_cast<ScopedEnum>(7); 65 const static ScopedCharEnum scoped_char_enum_val = ScopedCharEnum::case2; 66 const static ScopedLongLongEnum scoped_ll_enum_val_neg = 67 ScopedLongLongEnum::case0; 68 const static ScopedLongLongEnum scoped_ll_enum_val = 69 ScopedLongLongEnum::case2; 70 }; 71 72 const int A::int_val_with_address; 73 74 struct ClassWithOnlyConstStatic { 75 const static int member = 3; 76 }; 77 78 struct ClassWithConstexprs { 79 constexpr static int member = 2; 80 constexpr static Enum enum_val = enum_case2; 81 constexpr static ScopedEnum scoped_enum_val = ScopedEnum::scoped_enum_case2; 82 } cwc; 83 84 struct ClassWithEnumAlias { 85 using EnumAlias = ScopedEnum; 86 static constexpr EnumAlias enum_alias = ScopedEnum::scoped_enum_case2; 87 88 using EnumAliasAlias = EnumAlias; 89 static constexpr EnumAliasAlias enum_alias_alias = 90 ScopedEnum::scoped_enum_case1; 91 }; 92 93 namespace ns { 94 struct Foo { 95 constexpr static int mem = 10; 96 97 void bar() { return; } 98 }; 99 } // namespace ns 100 101 struct Foo { 102 constexpr static int mem = -29; 103 }; 104 105 int func() { 106 Foo f1; 107 ns::Foo f2; 108 f2.bar(); 109 return ns::Foo::mem + Foo::mem; 110 } 111 112 int main() { 113 A a; 114 115 auto char_max = A::char_max; 116 auto schar_max = A::schar_max; 117 auto uchar_max = A::uchar_max; 118 auto int_max = A::int_max; 119 auto uint_max = A::uint_max; 120 auto long_max = A::long_max; 121 auto ulong_max = A::ulong_max; 122 auto longlong_max = A::longlong_max; 123 auto ulonglong_max = A::ulonglong_max; 124 auto wchar_max = A::wchar_max; 125 126 auto char_min = A::char_min; 127 auto schar_min = A::schar_min; 128 auto uchar_min = A::uchar_min; 129 auto int_min = A::int_min; 130 auto uint_min = A::uint_min; 131 auto long_min = A::long_min; 132 auto ulong_min = A::ulong_min; 133 auto longlong_min = A::longlong_min; 134 auto ulonglong_min = A::ulonglong_min; 135 auto wchar_min = A::wchar_min; 136 137 int member_copy = ClassWithOnlyConstStatic::member; 138 139 Enum e = A::enum_val; 140 ScopedEnum se = A::scoped_enum_val; 141 se = A::not_enumerator_scoped_enum_val; 142 ScopedCharEnum sce = A::scoped_char_enum_val; 143 ScopedLongLongEnum sle = A::scoped_ll_enum_val; 144 145 auto enum_alias_val = ClassWithEnumAlias::enum_alias; 146 auto enum_alias_alias_val = ClassWithEnumAlias::enum_alias_alias; 147 auto ret = func(); 148 149 return 0; // break here 150 } 151