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
This commit is contained in:
parent
23b488ada2
commit
8e7d962aa5
|
@ -1,3 +1,12 @@
|
|||
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>
|
||||
|
||||
PR libstdc++/44875
|
||||
|
|
|
@ -307,21 +307,27 @@ namespace std
|
|||
{ };
|
||||
|
||||
template<typename _From, typename _To,
|
||||
bool = (is_void<_From>::value || is_void<_To>::value
|
||||
|| is_function<_To>::value || is_array<_To>::value)>
|
||||
bool = (is_void<_From>::value || is_function<_To>::value
|
||||
|| is_array<_To>::value)>
|
||||
struct __is_convertible_helper
|
||||
{ static const bool __value = (is_void<_From>::value
|
||||
&& is_void<_To>::value); };
|
||||
{ static const bool __value = is_void<_To>::value; };
|
||||
|
||||
template<typename _From, typename _To>
|
||||
class __is_convertible_helper<_From, _To, false>
|
||||
: public __sfinae_types
|
||||
{
|
||||
static __one __test(_To);
|
||||
static __two __test(...);
|
||||
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(...);
|
||||
|
||||
public:
|
||||
static const bool __value = sizeof(__test(declval<_From>())) == 1;
|
||||
static const bool __value = sizeof(__test<_From, _To>(0)) == 1;
|
||||
};
|
||||
|
||||
/// is_convertible
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
// with this library; see the file COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-error "static assertion failed" "" { target *-*-* } 676 }
|
||||
// { dg-error "static assertion failed" "" { target *-*-* } 682 }
|
||||
|
||||
#include <utility>
|
||||
|
||||
|
|
|
@ -48,5 +48,5 @@ void test01()
|
|||
// { dg-error "instantiated from here" "" { target *-*-* } 40 }
|
||||
// { dg-error "instantiated from here" "" { target *-*-* } 42 }
|
||||
|
||||
// { dg-error "invalid use of incomplete type" "" { target *-*-* } 639 }
|
||||
// { dg-error "declaration of" "" { target *-*-* } 603 }
|
||||
// { dg-error "invalid use of incomplete type" "" { target *-*-* } 645 }
|
||||
// { dg-error "declaration of" "" { target *-*-* } 609 }
|
||||
|
|
|
@ -48,5 +48,5 @@ void test01()
|
|||
// { dg-error "instantiated from here" "" { target *-*-* } 40 }
|
||||
// { dg-error "instantiated from here" "" { target *-*-* } 42 }
|
||||
|
||||
// { dg-error "invalid use of incomplete type" "" { target *-*-* } 562 }
|
||||
// { dg-error "declaration of" "" { target *-*-* } 526 }
|
||||
// { dg-error "invalid use of incomplete type" "" { target *-*-* } 568 }
|
||||
// { dg-error "declaration of" "" { target *-*-* } 532 }
|
||||
|
|
Loading…
Reference in New Issue