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()81int 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