Index: base/template_util_unittest.cc |
diff --git a/base/template_util_unittest.cc b/base/template_util_unittest.cc |
index 921596474b6d9a38991506396a1c64148025885d..ab92518376fe3b0bac3c684a44e63a5310b39fe4 100644 |
--- a/base/template_util_unittest.cc |
+++ b/base/template_util_unittest.cc |
@@ -30,6 +30,31 @@ static_assert(!is_non_const_reference<const int&>::value, |
"IsNonConstReference"); |
static_assert(is_non_const_reference<int&>::value, "IsNonConstReference"); |
+// underlying_value |
+enum ClassicEnum : int { CLASSIC_ENUM_A }; |
+enum class ClassyEnum : int { A }; |
+ |
+struct Uncopyable { |
+ Uncopyable(Uncopyable&&) = default; |
+ Uncopyable(const Uncopyable&) = delete; |
+}; |
+ |
+static_assert( |
+ std::is_same<decltype(underlying_value(Uncopyable{})), Uncopyable>::value, |
+ "underlying_value: failed to return an object without copying."); |
+ |
+static_assert( |
+ std::is_same<decltype(underlying_value(int64_t(10))), int64_t>::value, |
+ "underlying_value: failed to return an integer as its own type."); |
+ |
+static_assert( |
+ std::is_integral<decltype(underlying_value(CLASSIC_ENUM_A))>::value, |
+ "underlying_value: failed to return an unscoped enum as an integer."); |
+ |
+static_assert( |
+ std::is_integral<decltype(underlying_value(ClassyEnum::A))>::value, |
+ "underlying_value: failed to return a scoped enum as an integer."); |
+ |
class AssignParent {}; |
class AssignChild : AssignParent {}; |