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:
parent
917b47be74
commit
3ba9051e44
3 changed files with 28 additions and 13 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue