17d297de9SAndy Yankovsky #include <limits> 27d297de9SAndy Yankovsky 37d297de9SAndy Yankovsky enum Enum { 47d297de9SAndy Yankovsky enum_case1 = 1, 57d297de9SAndy Yankovsky enum_case2 = 2, 67d297de9SAndy Yankovsky }; 77d297de9SAndy Yankovsky 87d297de9SAndy Yankovsky enum class ScopedEnum { 97d297de9SAndy Yankovsky scoped_enum_case1 = 1, 107d297de9SAndy Yankovsky scoped_enum_case2 = 2, 117d297de9SAndy Yankovsky }; 127d297de9SAndy Yankovsky 137d297de9SAndy Yankovsky enum class ScopedCharEnum : char { 147d297de9SAndy Yankovsky case1 = 1, 157d297de9SAndy Yankovsky case2 = 2, 167d297de9SAndy Yankovsky }; 177d297de9SAndy Yankovsky 187d297de9SAndy Yankovsky enum class ScopedLongLongEnum : long long { 197d297de9SAndy Yankovsky case0 = std::numeric_limits<long long>::min(), 207d297de9SAndy Yankovsky case1 = 1, 217d297de9SAndy Yankovsky case2 = std::numeric_limits<long long>::max(), 227d297de9SAndy Yankovsky }; 237d297de9SAndy Yankovsky 247d297de9SAndy Yankovsky struct A { 257d297de9SAndy Yankovsky const static int int_val = 1; 267d297de9SAndy Yankovsky const static int int_val_with_address = 2; 277d297de9SAndy Yankovsky const static bool bool_val = true; 287d297de9SAndy Yankovsky 297d297de9SAndy Yankovsky const static auto char_max = std::numeric_limits<signed char>::max(); 307d297de9SAndy Yankovsky const static auto uchar_max = std::numeric_limits<unsigned char>::max(); 317d297de9SAndy Yankovsky const static auto int_max = std::numeric_limits<int>::max(); 327d297de9SAndy Yankovsky const static auto uint_max = std::numeric_limits<unsigned>::max(); 337d297de9SAndy Yankovsky const static auto long_max = std::numeric_limits<long>::max(); 347d297de9SAndy Yankovsky const static auto ulong_max = std::numeric_limits<unsigned long>::max(); 357d297de9SAndy Yankovsky const static auto longlong_max = std::numeric_limits<long long>::max(); 367d297de9SAndy Yankovsky const static auto ulonglong_max = 377d297de9SAndy Yankovsky std::numeric_limits<unsigned long long>::max(); 387d297de9SAndy Yankovsky 397d297de9SAndy Yankovsky const static auto char_min = std::numeric_limits<char>::min(); 407d297de9SAndy Yankovsky const static auto uchar_min = std::numeric_limits<unsigned char>::min(); 417d297de9SAndy Yankovsky const static auto int_min = std::numeric_limits<int>::min(); 427d297de9SAndy Yankovsky const static auto uint_min = std::numeric_limits<unsigned>::min(); 437d297de9SAndy Yankovsky const static auto long_min = std::numeric_limits<long>::min(); 447d297de9SAndy Yankovsky const static auto ulong_min = std::numeric_limits<unsigned long>::min(); 457d297de9SAndy Yankovsky const static auto longlong_min = std::numeric_limits<long long>::min(); 467d297de9SAndy Yankovsky const static auto ulonglong_min = 477d297de9SAndy Yankovsky std::numeric_limits<unsigned long long>::min(); 487d297de9SAndy Yankovsky 497d297de9SAndy Yankovsky const static Enum enum_val = enum_case2; 507d297de9SAndy Yankovsky const static Enum invalid_enum_val = static_cast<Enum>(enum_case2 + 5); 517d297de9SAndy Yankovsky const static ScopedEnum scoped_enum_val = ScopedEnum::scoped_enum_case2; 527d297de9SAndy Yankovsky const static ScopedEnum invalid_scoped_enum_val = static_cast<ScopedEnum>(5); 537d297de9SAndy Yankovsky const static ScopedCharEnum scoped_char_enum_val = ScopedCharEnum::case2; 547d297de9SAndy Yankovsky const static ScopedLongLongEnum scoped_ll_enum_val_neg = 557d297de9SAndy Yankovsky ScopedLongLongEnum::case0; 567d297de9SAndy Yankovsky const static ScopedLongLongEnum scoped_ll_enum_val = 577d297de9SAndy Yankovsky ScopedLongLongEnum::case2; 587d297de9SAndy Yankovsky }; 597d297de9SAndy Yankovsky 607d297de9SAndy Yankovsky const int A::int_val_with_address; 617d297de9SAndy Yankovsky 627d297de9SAndy Yankovsky struct ClassWithOnlyConstStatic { 637d297de9SAndy Yankovsky const static int member = 3; 647d297de9SAndy Yankovsky }; 657d297de9SAndy Yankovsky 667d297de9SAndy Yankovsky struct ClassWithConstexprs { 677d297de9SAndy Yankovsky constexpr static int member = 2; 687d297de9SAndy Yankovsky constexpr static Enum enum_val = enum_case2; 697d297de9SAndy Yankovsky constexpr static ScopedEnum scoped_enum_val = ScopedEnum::scoped_enum_case2; 707d297de9SAndy Yankovsky } cwc; 717d297de9SAndy Yankovsky 72*140bcd36SMichael Buch struct ClassWithEnumAlias { 73*140bcd36SMichael Buch using EnumAlias = ScopedEnum; 74*140bcd36SMichael Buch static constexpr EnumAlias enum_alias = ScopedEnum::scoped_enum_case2; 75*140bcd36SMichael Buch 76*140bcd36SMichael Buch using EnumAliasAlias = EnumAlias; 77*140bcd36SMichael Buch static constexpr EnumAliasAlias enum_alias_alias = 78*140bcd36SMichael Buch ScopedEnum::scoped_enum_case1; 79*140bcd36SMichael Buch }; 80*140bcd36SMichael Buch main()817d297de9SAndy Yankovskyint main() { 827d297de9SAndy Yankovsky A a; 837d297de9SAndy Yankovsky 847d297de9SAndy Yankovsky auto char_max = A::char_max; 857d297de9SAndy Yankovsky auto uchar_max = A::uchar_max; 867d297de9SAndy Yankovsky auto int_max = A::int_max; 877d297de9SAndy Yankovsky auto uint_max = A::uint_max; 887d297de9SAndy Yankovsky auto long_max = A::long_max; 897d297de9SAndy Yankovsky auto ulong_max = A::ulong_max; 907d297de9SAndy Yankovsky auto longlong_max = A::longlong_max; 917d297de9SAndy Yankovsky auto ulonglong_max = A::ulonglong_max; 927d297de9SAndy Yankovsky 937d297de9SAndy Yankovsky auto char_min = A::char_min; 947d297de9SAndy Yankovsky auto uchar_min = A::uchar_min; 957d297de9SAndy Yankovsky auto int_min = A::int_min; 967d297de9SAndy Yankovsky auto uint_min = A::uint_min; 977d297de9SAndy Yankovsky auto long_min = A::long_min; 987d297de9SAndy Yankovsky auto ulong_min = A::ulong_min; 997d297de9SAndy Yankovsky auto longlong_min = A::longlong_min; 1007d297de9SAndy Yankovsky auto ulonglong_min = A::ulonglong_min; 1017d297de9SAndy Yankovsky 1027d297de9SAndy Yankovsky int member_copy = ClassWithOnlyConstStatic::member; 1037d297de9SAndy Yankovsky 1047d297de9SAndy Yankovsky Enum e = A::enum_val; 1057d297de9SAndy Yankovsky e = A::invalid_enum_val; 1067d297de9SAndy Yankovsky ScopedEnum se = A::scoped_enum_val; 1077d297de9SAndy Yankovsky se = A::invalid_scoped_enum_val; 1087d297de9SAndy Yankovsky ScopedCharEnum sce = A::scoped_char_enum_val; 1097d297de9SAndy Yankovsky ScopedLongLongEnum sle = A::scoped_ll_enum_val; 110*140bcd36SMichael Buch 111*140bcd36SMichael Buch auto enum_alias_val = ClassWithEnumAlias::enum_alias; 112*140bcd36SMichael Buch auto enum_alias_alias_val = ClassWithEnumAlias::enum_alias_alias; 113*140bcd36SMichael Buch 1147d297de9SAndy Yankovsky return 0; // break here 1157d297de9SAndy Yankovsky } 116