2016-11-30 Ville Voutilainen <ville.voutilai...@gmail.com>
Fix testsuite failures caused by the patch implementing LWG 2534. * include/std/istream (__is_convertible_to_basic_istream): Change the return types of __check, introduce stream_type. (operator>>(_Istream&&, _Tp&&)): Use __is_convertible_to_basic_istream::stream_type as the return type. * include/std/ostream (__is_convertible_to_basic_ostream): Change the return types of __check, introduce stream_type. (operator>>(_Ostream&&, _Tp&&)): Use __is_convertible_to_basic_ostream::stream_type as the return type.
diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream index 4f0e940..81df402 100644 --- a/libstdc++-v3/include/std/istream +++ b/libstdc++-v3/include/std/istream @@ -913,11 +913,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct __is_convertible_to_basic_istream { template<typename _Ch, typename _Up> - static true_type __check(basic_istream<_Ch, _Up>*); + static basic_istream<_Ch, _Up>& __check(basic_istream<_Ch, _Up>*); - static false_type __check(void*); + static void __check(void*); public: - using type = decltype(__check(declval<_Tp*>())); + using stream_type = decltype(__check(declval<_Tp*>())); + using type = __not_<is_same<stream_type, void>>; constexpr static bool value = type::value; }; @@ -949,7 +950,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __is_convertible_to_basic_istream< typename remove_reference<_Istream>::type>, __is_extractable<_Istream&, _Tp&&>>::value, - _Istream&>::type + typename __is_convertible_to_basic_istream< + typename + remove_reference<_Istream>::type>::stream_type>::type operator>>(_Istream&& __is, _Tp&& __x) { __is >> std::forward<_Tp>(__x); diff --git a/libstdc++-v3/include/std/ostream b/libstdc++-v3/include/std/ostream index a1fe892..64db7c7 100644 --- a/libstdc++-v3/include/std/ostream +++ b/libstdc++-v3/include/std/ostream @@ -617,11 +617,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct __is_convertible_to_basic_ostream { template<typename _Ch, typename _Up> - static true_type __check(basic_ostream<_Ch, _Up>*); + static basic_ostream<_Ch, _Up>& __check(basic_ostream<_Ch, _Up>*); - static false_type __check(void*); + static void __check(void*); public: - using type = decltype(__check(declval<_Tp*>())); + using stream_type = decltype(__check(declval<_Tp*>())); + using type = __not_<is_same<stream_type, void>>; constexpr static bool value = type::value; }; @@ -650,8 +651,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __is_convertible_to_basic_ostream< typename remove_reference<_Ostream>::type>, __is_insertable<_Ostream&, const _Tp&>>::value, - _Ostream&>::type - //basic_ostream<_CharT, _Traits>& + typename __is_convertible_to_basic_ostream< + typename + remove_reference<_Ostream>::type>::stream_type>::type operator<<(_Ostream&& __os, const _Tp& __x) { __os << __x;