Fix PR#32605: common_type<T> is not SFINAE-friendly

llvm-svn: 299901
This commit is contained in:
Marshall Clow 2017-04-10 23:47:47 +00:00
parent 8ff7785ee1
commit c2be5ab581
2 changed files with 6 additions and 4 deletions

View File

@ -1998,9 +1998,7 @@ struct _LIBCPP_TEMPLATE_VIS common_type {};
template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS common_type<_Tp>
{
typedef typename common_type<_Tp, _Tp>::type type;
};
: public common_type<_Tp, _Tp> {};
// bullet 3 - sizeof...(Tp) == 2

View File

@ -45,6 +45,8 @@ namespace std
template <> struct common_type< ::S<long>, long> {};
template <> struct common_type<long, ::S<long> > {};
template <> struct common_type<::X<float> > {};
template <> struct common_type<::X<double>, ::X<double> > {};
}
#if TEST_STD_VER >= 11
@ -304,5 +306,7 @@ int main()
static_assert((std::is_same<std::common_type<const int, int>::type, int>::value), "");
static_assert((std::is_same<std::common_type<int, const int>::type, int>::value), "");
static_assert((std::is_same<std::common_type<const int, const int>::type, int>::value), "");
static_assert(no_common_type<X<float> >::value, "");
static_assert(no_common_type<X<double> >::value, "");
}