From 6d3bd8f7ec0e702ec7ba2d8ac6da8a2be0ac68f9 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Thu, 31 Jul 2014 19:09:26 +0000 Subject: [PATCH] [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 --- libcxx/include/type_traits | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits index e9f6c01..371a15e 100644 --- a/libcxx/include/type_traits +++ b/libcxx/include/type_traits @@ -1544,16 +1544,21 @@ template 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 +struct __is_destructible_apply { typedef int type; }; + template struct __is_destructor_wellformed { - template ().~_Tp1())> - static char __test (int); + template + static char __test ( + typename __is_destructible_apply().~_Tp1())>::type + ); template static __two __test (...); static const bool value = sizeof(__test<_Tp>(12)) == sizeof(char); - }; +}; template struct __destructible_imp; -- 2.7.4