|
@@ -17,24 +17,32 @@
|
|
|
#include "test_macros.h"
|
|
|
|
|
|
enum E { V = INT_MIN };
|
|
|
-enum F { W = UINT_MAX };
|
|
|
|
|
|
-int main()
|
|
|
-{
|
|
|
#if !defined(_WIN32) || defined(__MINGW32__)
|
|
|
- typedef unsigned ExpectUnsigned;
|
|
|
+ #define TEST_UNSIGNED_UNDERLYING_TYPE 1
|
|
|
#else
|
|
|
- typedef int ExpectUnsigned; // MSVC's ABI doesn't follow the Standard
|
|
|
+ #define TEST_UNSIGNED_UNDERLYING_TYPE 0 // MSVC's ABI doesn't follow the Standard
|
|
|
#endif
|
|
|
+
|
|
|
+#if TEST_UNSIGNED_UNDERLYING_TYPE
|
|
|
+enum F { W = UINT_MAX };
|
|
|
+#endif // TEST_UNSIGNED_UNDERLYING_TYPE
|
|
|
+
|
|
|
+int main()
|
|
|
+{
|
|
|
static_assert((std::is_same<std::underlying_type<E>::type, int>::value),
|
|
|
"E has the wrong underlying type");
|
|
|
- static_assert((std::is_same<std::underlying_type<F>::type, ExpectUnsigned>::value),
|
|
|
+#if TEST_UNSIGNED_UNDERLYING_TYPE
|
|
|
+ static_assert((std::is_same<std::underlying_type<F>::type, unsigned>::value),
|
|
|
"F has the wrong underlying type");
|
|
|
+#endif // TEST_UNSIGNED_UNDERLYING_TYPE
|
|
|
|
|
|
#if TEST_STD_VER > 11
|
|
|
static_assert((std::is_same<std::underlying_type_t<E>, int>::value), "");
|
|
|
- static_assert((std::is_same<std::underlying_type_t<F>, ExpectUnsigned>::value), "");
|
|
|
-#endif
|
|
|
+#if TEST_UNSIGNED_UNDERLYING_TYPE
|
|
|
+ static_assert((std::is_same<std::underlying_type_t<F>, unsigned>::value), "");
|
|
|
+#endif // TEST_UNSIGNED_UNDERLYING_TYPE
|
|
|
+#endif // TEST_STD_VER > 11
|
|
|
|
|
|
#if TEST_STD_VER >= 11
|
|
|
enum G : char { };
|
|
@@ -43,6 +51,6 @@ int main()
|
|
|
"G has the wrong underlying type");
|
|
|
#if TEST_STD_VER > 11
|
|
|
static_assert((std::is_same<std::underlying_type_t<G>, char>::value), "");
|
|
|
-#endif
|
|
|
+#endif // TEST_STD_VER > 11
|
|
|
#endif // TEST_STD_VER >= 11
|
|
|
}
|