[libcxx] Remove use of default function template parameters in type traits. Fixes DR20484

Summary: This patch moves the SFINAE for __is_destructor_welformed out of the function template parameters. type_traits must compile in c++03 mode since it is included in c++03 headers. 

Test Plan: No tests have been added.

Reviewers: danalbert, mclow.lists

Reviewed By: danalbert

Subscribers: K-ballo, cfe-commits

Differential Revision: http://reviews.llvm.org/D4735

llvm-svn: 214422
This commit is contained in:
Eric Fiselier 2014-07-31 19:09:26 +00:00
parent 19fc293782
commit 6d3bd8f7ec
1 changed files with 8 additions and 3 deletions

View File

@ -1544,16 +1544,21 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_move_assignable
// Otherwise, return "std::declval<_Up&>().~_Up()" is well-formed
// where _Up is remove_all_extents<_Tp>::type
template <class>
struct __is_destructible_apply { typedef int type; };
template <typename _Tp>
struct __is_destructor_wellformed {
template <typename _Tp1, typename _Tp2 = decltype(_VSTD::declval<_Tp1&>().~_Tp1())>
static char __test (int);
template <typename _Tp1>
static char __test (
typename __is_destructible_apply<decltype(_VSTD::declval<_Tp1&>().~_Tp1())>::type
);
template <typename _Tp1>
static __two __test (...);
static const bool value = sizeof(__test<_Tp>(12)) == sizeof(char);
};
};
template <class _Tp, bool>
struct __destructible_imp;