diff options
| -rw-r--r-- | libcxx/include/__config | 2 | ||||
| -rw-r--r-- | libcxx/include/experimental/string_view | 7 | ||||
| -rw-r--r-- | libcxx/include/ios | 17 |
3 files changed, 7 insertions, 19 deletions
diff --git a/libcxx/include/__config b/libcxx/include/__config index 321e7177822..ac46979e342 100644 --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -727,7 +727,7 @@ template <unsigned> struct __static_assert_check {}; #define _NOALIAS #endif -#if __has_feature(cxx_explicit_conversions) || defined(__IBMCPP__) || \ +#if __has_extension(cxx_explicit_conversions) || defined(__IBMCPP__) || \ (!defined(_LIBCPP_CXX03_LANG) && defined(__GNUC__)) // All supported GCC versions # define _LIBCPP_EXPLICIT explicit #else diff --git a/libcxx/include/experimental/string_view b/libcxx/include/experimental/string_view index a62fe6e95a1..ccc886ea98f 100644 --- a/libcxx/include/experimental/string_view +++ b/libcxx/include/experimental/string_view @@ -340,7 +340,12 @@ _LIBCPP_BEGIN_NAMESPACE_LFTS // [string.view.ops], string operations: template<class _Allocator> _LIBCPP_INLINE_VISIBILITY - _LIBCPP_EXPLICIT operator basic_string<_CharT, _Traits, _Allocator>() const + // Clang's extended C++11 explict conversions don't work with + // 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()); } template<class _Allocator = allocator<_CharT> > diff --git a/libcxx/include/ios b/libcxx/include/ios index fb8f88dddab..ea83822ac16 100644 --- a/libcxx/include/ios +++ b/libcxx/include/ios @@ -572,13 +572,6 @@ ios_base::exceptions(iostate __iostate) 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> class _LIBCPP_TYPE_VIS_ONLY basic_ios : public ios_base @@ -592,18 +585,8 @@ public: typedef typename traits_type::pos_type pos_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_EXPLICIT operator bool() const {return !fail();} -#endif _LIBCPP_ALWAYS_INLINE bool operator!() const {return fail();} _LIBCPP_ALWAYS_INLINE iostate rdstate() const {return ios_base::rdstate();} |

