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 int main() { 73 A a; 74 75 auto char_max = A::char_max; 76 auto uchar_max = A::uchar_max; 77 auto int_max = A::int_max; 78 auto uint_max = A::uint_max; 79 auto long_max = A::long_max; 80 auto ulong_max = A::ulong_max; 81 auto longlong_max = A::longlong_max; 82 auto ulonglong_max = A::ulonglong_max; 83 84 auto char_min = A::char_min; 85 auto uchar_min = A::uchar_min; 86 auto int_min = A::int_min; 87 auto uint_min = A::uint_min; 88 auto long_min = A::long_min; 89 auto ulong_min = A::ulong_min; 90 auto longlong_min = A::longlong_min; 91 auto ulonglong_min = A::ulonglong_min; 92 93 int member_copy = ClassWithOnlyConstStatic::member; 94 95 Enum e = A::enum_val; 96 e = A::invalid_enum_val; 97 ScopedEnum se = A::scoped_enum_val; 98 se = A::invalid_scoped_enum_val; 99 ScopedCharEnum sce = A::scoped_char_enum_val; 100 ScopedLongLongEnum sle = A::scoped_ll_enum_val; 101 return 0; // break here 102 } 103