Revert "Rework fix for PR19460 - Use explicit bool as an extension instead."
This reverts commit 3a1b90a866.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291921 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -772,7 +772,7 @@ template <unsigned> struct __static_assert_check {};
|
|||||||
#define _NOALIAS
|
#define _NOALIAS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __has_extension(cxx_explicit_conversions) || defined(__IBMCPP__) || \
|
#if __has_feature(cxx_explicit_conversions) || defined(__IBMCPP__) || \
|
||||||
(!defined(_LIBCPP_CXX03_LANG) && defined(__GNUC__)) // All supported GCC versions
|
(!defined(_LIBCPP_CXX03_LANG) && defined(__GNUC__)) // All supported GCC versions
|
||||||
# define _LIBCPP_EXPLICIT explicit
|
# define _LIBCPP_EXPLICIT explicit
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -340,12 +340,7 @@ _LIBCPP_BEGIN_NAMESPACE_LFTS
|
|||||||
// [string.view.ops], string operations:
|
// [string.view.ops], string operations:
|
||||||
template<class _Allocator>
|
template<class _Allocator>
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
// Clang's extended C++11 explict conversions don't work with
|
_LIBCPP_EXPLICIT operator basic_string<_CharT, _Traits, _Allocator>() const
|
||||||
// string_view in C++03.
|
|
||||||
#ifndef _LIBCPP_CXX03_LANG
|
|
||||||
_LIBCPP_EXPLICIT
|
|
||||||
#endif
|
|
||||||
operator basic_string<_CharT, _Traits, _Allocator>() const
|
|
||||||
{ return basic_string<_CharT, _Traits, _Allocator>( begin(), end()); }
|
{ return basic_string<_CharT, _Traits, _Allocator>( begin(), end()); }
|
||||||
|
|
||||||
template<class _Allocator = allocator<_CharT> >
|
template<class _Allocator = allocator<_CharT> >
|
||||||
|
|||||||
17
include/ios
17
include/ios
@@ -572,6 +572,13 @@ ios_base::exceptions(iostate __iostate)
|
|||||||
clear(__rdstate_);
|
clear(__rdstate_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(_LIBCPP_CXX03_LANG)
|
||||||
|
struct _LIBCPP_TYPE_VIS_ONLY __cxx03_bool {
|
||||||
|
typedef void (__cxx03_bool::*__bool_type)();
|
||||||
|
void __true_value() {}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
template <class _CharT, class _Traits>
|
template <class _CharT, class _Traits>
|
||||||
class _LIBCPP_TEMPLATE_VIS basic_ios
|
class _LIBCPP_TEMPLATE_VIS basic_ios
|
||||||
: public ios_base
|
: public ios_base
|
||||||
@@ -585,8 +592,18 @@ public:
|
|||||||
typedef typename traits_type::pos_type pos_type;
|
typedef typename traits_type::pos_type pos_type;
|
||||||
typedef typename traits_type::off_type off_type;
|
typedef typename traits_type::off_type off_type;
|
||||||
|
|
||||||
|
// __true_value will generate undefined references when linking unless
|
||||||
|
// we give it internal linkage.
|
||||||
|
|
||||||
|
#if defined(_LIBCPP_CXX03_LANG)
|
||||||
|
_LIBCPP_ALWAYS_INLINE
|
||||||
|
operator __cxx03_bool::__bool_type() const {
|
||||||
|
return !fail() ? &__cxx03_bool::__true_value : nullptr;
|
||||||
|
}
|
||||||
|
#else
|
||||||
_LIBCPP_ALWAYS_INLINE
|
_LIBCPP_ALWAYS_INLINE
|
||||||
_LIBCPP_EXPLICIT operator bool() const {return !fail();}
|
_LIBCPP_EXPLICIT operator bool() const {return !fail();}
|
||||||
|
#endif
|
||||||
|
|
||||||
_LIBCPP_ALWAYS_INLINE bool operator!() const {return fail();}
|
_LIBCPP_ALWAYS_INLINE bool operator!() const {return fail();}
|
||||||
_LIBCPP_ALWAYS_INLINE iostate rdstate() const {return ios_base::rdstate();}
|
_LIBCPP_ALWAYS_INLINE iostate rdstate() const {return ios_base::rdstate();}
|
||||||
|
|||||||
Reference in New Issue
Block a user