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 istream_type.
(operator>>(_Istream&&, _Tp&&)):
Use __is_convertible_to_basic_istream::istream_type as the return type.
* include/std/ostream (__is_convertible_to_basic_ostream):
Change the return types of __check, introduce ostream_type.
(operator>>(_Ostream&&, _Tp&&)):
Use __is_convertible_to_basic_ostream::ostream_type as the return type.

From-SVN: r243036
This commit is contained in:
Ville Voutilainen 2016-11-30 18:32:24 +02:00 committed by Ville Voutilainen
parent 917b47be74
commit 3ba9051e44
3 changed files with 28 additions and 13 deletions

View File

@ -1,3 +1,15 @@
2016-11-30 Ville Voutilainen <ville.voutilainen@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 istream_type.
(operator>>(_Istream&&, _Tp&&)):
Use __is_convertible_to_basic_istream::istream_type as the return type.
* include/std/ostream (__is_convertible_to_basic_ostream):
Change the return types of __check, introduce ostream_type.
(operator>>(_Ostream&&, _Tp&&)):
Use __is_convertible_to_basic_ostream::ostream_type as the return type.
2016-11-30 Tim Shen <timshen@google.com>
* include/bits/shared_ptr_base.h

View File

@ -913,11 +913,13 @@ _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 istream_type =
decltype(__check(declval<typename remove_reference<_Tp>::type*>()));
using type = __not_<is_same<istream_type, void>>;
constexpr static bool value = type::value;
};
@ -946,10 +948,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Istream, typename _Tp>
inline
typename enable_if<__and_<__not_<is_lvalue_reference<_Istream>>,
__is_convertible_to_basic_istream<
typename remove_reference<_Istream>::type>,
__is_convertible_to_basic_istream<_Istream>,
__is_extractable<_Istream&, _Tp&&>>::value,
_Istream&>::type
typename __is_convertible_to_basic_istream<
_Istream>::istream_type>::type
operator>>(_Istream&& __is, _Tp&& __x)
{
__is >> std::forward<_Tp>(__x);

View File

@ -617,11 +617,13 @@ _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 ostream_type =
decltype(__check(declval<typename remove_reference<_Tp>::type*>()));
using type = __not_<is_same<ostream_type, void>>;
constexpr static bool value = type::value;
};
@ -647,11 +649,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Ostream, typename _Tp>
inline
typename enable_if<__and_<__not_<is_lvalue_reference<_Ostream>>,
__is_convertible_to_basic_ostream<
typename remove_reference<_Ostream>::type>,
__is_convertible_to_basic_ostream<_Ostream>,
__is_insertable<_Ostream&, const _Tp&>>::value,
_Ostream&>::type
//basic_ostream<_CharT, _Traits>&
typename __is_convertible_to_basic_ostream<
_Ostream>::ostream_type>::type
operator<<(_Ostream&& __os, const _Tp& __x)
{
__os << __x;