Commit 8e7d962a by Paolo Carlini Committed by Paolo Carlini

type_traits (is_convertible): Use SFINAE.

2010-07-11  Paolo Carlini  <paolo.carlini@oracle.com>

	* include/std/type_traits (is_convertible): Use SFINAE.
	* testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust
	dg-error line numbers.
	* testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
	Likewise.
	* testsuite/20_util/declval/requirements/1_neg.cc: Likewise.

From-SVN: r162056
parent 23b488ad
2010-07-11 Paolo Carlini <paolo.carlini@oracle.com>
* include/std/type_traits (is_convertible): Use SFINAE.
* testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust
dg-error line numbers.
* testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
Likewise.
* testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
2010-07-09 Jonathan Wakely <jwakely.gcc@gmail.com> 2010-07-09 Jonathan Wakely <jwakely.gcc@gmail.com>
PR libstdc++/44875 PR libstdc++/44875
......
...@@ -307,21 +307,27 @@ namespace std ...@@ -307,21 +307,27 @@ namespace std
{ }; { };
template<typename _From, typename _To, template<typename _From, typename _To,
bool = (is_void<_From>::value || is_void<_To>::value bool = (is_void<_From>::value || is_function<_To>::value
|| is_function<_To>::value || is_array<_To>::value)> || is_array<_To>::value)>
struct __is_convertible_helper struct __is_convertible_helper
{ static const bool __value = (is_void<_From>::value { static const bool __value = is_void<_To>::value; };
&& is_void<_To>::value); };
template<typename _From, typename _To> template<typename _From, typename _To>
class __is_convertible_helper<_From, _To, false> class __is_convertible_helper<_From, _To, false>
: public __sfinae_types : public __sfinae_types
{ {
static __one __test(_To); template<typename _To1>
static void __test_aux(_To1);
template<typename _From1, typename _To1>
static decltype(__test_aux<_To1>(std::declval<_From1>()), __one())
__test(int);
template<typename, typename>
static __two __test(...); static __two __test(...);
public: public:
static const bool __value = sizeof(__test(declval<_From>())) == 1; static const bool __value = sizeof(__test<_From, _To>(0)) == 1;
}; };
/// is_convertible /// is_convertible
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
// with this library; see the file COPYING3. If not see // with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// { dg-error "static assertion failed" "" { target *-*-* } 676 } // { dg-error "static assertion failed" "" { target *-*-* } 682 }
#include <utility> #include <utility>
......
...@@ -48,5 +48,5 @@ void test01() ...@@ -48,5 +48,5 @@ void test01()
// { dg-error "instantiated from here" "" { target *-*-* } 40 } // { dg-error "instantiated from here" "" { target *-*-* } 40 }
// { dg-error "instantiated from here" "" { target *-*-* } 42 } // { dg-error "instantiated from here" "" { target *-*-* } 42 }
// { dg-error "invalid use of incomplete type" "" { target *-*-* } 639 } // { dg-error "invalid use of incomplete type" "" { target *-*-* } 645 }
// { dg-error "declaration of" "" { target *-*-* } 603 } // { dg-error "declaration of" "" { target *-*-* } 609 }
...@@ -48,5 +48,5 @@ void test01() ...@@ -48,5 +48,5 @@ void test01()
// { dg-error "instantiated from here" "" { target *-*-* } 40 } // { dg-error "instantiated from here" "" { target *-*-* } 40 }
// { dg-error "instantiated from here" "" { target *-*-* } 42 } // { dg-error "instantiated from here" "" { target *-*-* } 42 }
// { dg-error "invalid use of incomplete type" "" { target *-*-* } 562 } // { dg-error "invalid use of incomplete type" "" { target *-*-* } 568 }
// { dg-error "declaration of" "" { target *-*-* } 526 } // { dg-error "declaration of" "" { target *-*-* } 532 }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment