diff --git a/include/etl/type_traits.h b/include/etl/type_traits.h index 13d21810..6ecf9451 100644 --- a/include/etl/type_traits.h +++ b/include/etl/type_traits.h @@ -3724,7 +3724,7 @@ namespace etl struct common_type : etl::conditional< etl::is_same::type>::value && etl::is_same::type>::value, private_common_type::common_type_2_impl, - common_type::type, typename etl::decay::type>>::type + common_type::type, typename etl::decay::type>>::type { }; diff --git a/test/test_type_traits.cpp b/test/test_type_traits.cpp index 6756d6d9..603c992b 100644 --- a/test/test_type_traits.cpp +++ b/test/test_type_traits.cpp @@ -2268,5 +2268,23 @@ namespace CHECK_TRUE(etl::is_unsigned::value); #endif } + +#if ETL_USING_CPP11 + //************************************************************************* + TEST(test_common_type) + { + // Reference types must decay to the same result as std::common_type. + CHECK((etl::is_same, long>::value)); + CHECK((etl::is_same, std::common_type::type>::value)); + CHECK((etl::is_same, long>::value)); + CHECK((etl::is_same, std::common_type::type>::value)); + CHECK((etl::is_same, char>::value)); + CHECK((etl::is_same, std::common_type::type>::value)); + + // Already decayed types. + CHECK((etl::is_same, long>::value)); + CHECK((etl::is_same, std::common_type::type>::value)); + } +#endif } } // namespace