From 3e5fb20f1ffbc71f7593460dd28873025e03c64a Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 26 Jan 2017 18:32:55 +0000 Subject: [PATCH] Fix namespace versioning and remove __detail::__identity helpers PR libstdc++/79243 * include/bits/c++config (literals::string_view_literals::__7): Add. Only declare versioned namespaces for the relevant C++ dialects. * include/experimental/bits/erase_if.h (fundamentals_v2::__detail): Add versioning macros. * include/experimental/bits/lfts_config.h: (fundamentals_v1::__detail::__7, fundamentals_v2::__detail::__7): Add. * include/experimental/string_view (fundamentals_v2::__detail): Add versioning macros. (fundamentals_v2::__detail::__identity): Remove. (fundamentals_v2::__detail::__idt): Use common_type instead of __detail::__identity. * include/std/string_view (__detail::__identity, __detail::__idt): Likewise. (literals::string_view_literals): Fix nesting of versioning macros. From-SVN: r244945 --- libstdc++-v3/ChangeLog | 16 ++++++++++ libstdc++-v3/include/bits/c++config | 30 +++++++++++++------ .../include/experimental/bits/erase_if.h | 7 ++--- .../include/experimental/bits/lfts_config.h | 6 +++- libstdc++-v3/include/experimental/string_view | 19 ++++++------ libstdc++-v3/include/std/string_view | 21 +++++-------- 6 files changed, 62 insertions(+), 37 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 2fc38c97a63..1428ffe95c2 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,21 @@ 2017-01-26 Jonathan Wakely + PR libstdc++/79243 + * include/bits/c++config (literals::string_view_literals::__7): Add. + Only declare versioned namespaces for the relevant C++ dialects. + * include/experimental/bits/erase_if.h (fundamentals_v2::__detail): + Add versioning macros. + * include/experimental/bits/lfts_config.h: + (fundamentals_v1::__detail::__7, fundamentals_v2::__detail::__7): Add. + * include/experimental/string_view (fundamentals_v2::__detail): + Add versioning macros. + (fundamentals_v2::__detail::__identity): Remove. + (fundamentals_v2::__detail::__idt): Use common_type instead of + __detail::__identity. + * include/std/string_view (__detail::__identity, __detail::__idt): + Likewise. + (literals::string_view_literals): Fix nesting of versioning macros. + PR libstdc++/79190 * libsupc++/del_opa.cc (operator delete(void*, std::align_val_t)) [!_GLIBCXX_HAVE_ALIGNED_ALLOC && !_GLIBCXX_HAVE_POSIX_MEMALIGN diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index bc1ab5fc17e..3b694e07c51 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -179,7 +179,9 @@ namespace __profile { } namespace __cxx1998 { } - namespace __detail { } + namespace __detail { + namespace __variant { } // C++17 + } namespace rel_ops { } @@ -194,14 +196,15 @@ namespace decimal { } - namespace chrono { } - namespace placeholders { } - namespace regex_constants { } - namespace this_thread { } - inline namespace literals { - inline namespace chrono_literals { } - inline namespace complex_literals { } - inline namespace string_literals { } + namespace chrono { } // C++11 + namespace placeholders { } // C++11 + namespace regex_constants { } // C++11 + namespace this_thread { } // C++11 + inline namespace literals { // C++14 + inline namespace chrono_literals { } // C++14 + inline namespace complex_literals { } // C++14 + inline namespace string_literals { } // C++14 + inline namespace string_view_literals { } // C++17 } } @@ -282,20 +285,29 @@ namespace std namespace decimal { inline namespace __7 { } } +#if __cplusplus >= 201103L namespace chrono { inline namespace __7 { } } namespace placeholders { inline namespace __7 { } } namespace regex_constants { inline namespace __7 { } } namespace this_thread { inline namespace __7 { } } +#if __cplusplus >= 201402L inline namespace literals { inline namespace chrono_literals { inline namespace __7 { } } inline namespace complex_literals { inline namespace __7 { } } inline namespace string_literals { inline namespace __7 { } } +#if __cplusplus > 201402L + inline namespace string_view_literals { inline namespace __7 { } } +#endif // C++17 } +#endif // C++14 +#endif // C++11 namespace __detail { inline namespace __7 { } +#if __cplusplus > 201402L namespace __variant { inline namespace __7 { } } +#endif } } diff --git a/libstdc++-v3/include/experimental/bits/erase_if.h b/libstdc++-v3/include/experimental/bits/erase_if.h index c4ac2828d7b..7dc47dbb3eb 100644 --- a/libstdc++-v3/include/experimental/bits/erase_if.h +++ b/libstdc++-v3/include/experimental/bits/erase_if.h @@ -43,9 +43,9 @@ namespace experimental { inline namespace fundamentals_v2 { - namespace __detail { +_GLIBCXX_BEGIN_NAMESPACE_VERSION template void __erase_nodes_if(_Container& __cont, _Predicate __pred) @@ -59,9 +59,8 @@ inline namespace fundamentals_v2 ++__iter; } } - } - - +_GLIBCXX_END_NAMESPACE_VERSION + } // namespace __detail } // inline namespace fundamentals_v2 } // namespace experimental } // namespace std diff --git a/libstdc++-v3/include/experimental/bits/lfts_config.h b/libstdc++-v3/include/experimental/bits/lfts_config.h index 97f090f868b..a9faa47a842 100644 --- a/libstdc++-v3/include/experimental/bits/lfts_config.h +++ b/libstdc++-v3/include/experimental/bits/lfts_config.h @@ -46,10 +46,14 @@ inline namespace fundamentals_v2 { inline namespace __7 { } } namespace experimental { -inline namespace fundamentals_v1 { inline namespace __7 { } } +inline namespace fundamentals_v1 { + inline namespace __7 { } + namespace __detail { inline namespace __7 { } } +} inline namespace fundamentals_v2 { inline namespace __7 { } namespace pmr { inline namespace __7 { } } + namespace __detail { inline namespace __7 { } } } // namespace fundamentals_v2 inline namespace literals { inline namespace string_view_literals { inline namespace __7 { } diff --git a/libstdc++-v3/include/experimental/string_view b/libstdc++-v3/include/experimental/string_view index 2a2364cfa1e..bd212ac3719 100644 --- a/libstdc++-v3/include/experimental/string_view +++ b/libstdc++-v3/include/experimental/string_view @@ -434,24 +434,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const _CharT* _M_str; }; +_GLIBCXX_END_NAMESPACE_VERSION // [string.view.comparison], non-member basic_string_view comparison functions namespace __detail { - // Identity transform to make ADL work with just one argument. - // See n3766.html. - template - struct __identity - { typedef _Tp type; }; - - template<> - struct __identity; - +_GLIBCXX_BEGIN_NAMESPACE_VERSION + // Identity transform to create a non-deduced context, so that only one + // argument participates in template argument deduction and the other + // argument gets implicitly converted to the deduced type. See n3766.html. template - using __idt = typename __identity<_Tp>::type; + using __idt = common_type_t<_Tp>; +_GLIBCXX_END_NAMESPACE_VERSION } +_GLIBCXX_BEGIN_NAMESPACE_VERSION + template inline bool operator==(basic_string_view<_CharT, _Traits> __x, diff --git a/libstdc++-v3/include/std/string_view b/libstdc++-v3/include/std/string_view index a71918553bb..311d6d725b3 100644 --- a/libstdc++-v3/include/std/string_view +++ b/libstdc++-v3/include/std/string_view @@ -430,20 +430,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION // [string.view.comparison], non-member basic_string_view comparison function + namespace __detail { _GLIBCXX_BEGIN_NAMESPACE_VERSION - // Identity transform to make ADL work with just one argument. - // See n3766.html. - template - struct __identity - { typedef _Tp type; }; - - template<> - struct __identity; - + // Identity transform to create a non-deduced context, so that only one + // argument participates in template argument deduction and the other + // argument gets implicitly converted to the deduced type. See n3766.html. template - using __idt = typename __identity<_Tp>::type; + using __idt = common_type_t<_Tp>; _GLIBCXX_END_NAMESPACE_VERSION } @@ -639,12 +634,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct __is_fast_hash> : std::false_type { }; #endif +_GLIBCXX_END_NAMESPACE_VERSION inline namespace literals { inline namespace string_view_literals { - _GLIBCXX_BEGIN_NAMESPACE_VERSION +_GLIBCXX_BEGIN_NAMESPACE_VERSION inline constexpr basic_string_view operator""sv(const char* __str, size_t __len) @@ -666,11 +662,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return basic_string_view{__str, __len}; } #endif - _GLIBCXX_END_NAMESPACE_VERSION +_GLIBCXX_END_NAMESPACE_VERSION } // namespace string_literals } // namespace literals -_GLIBCXX_END_NAMESPACE_VERSION } // namespace std #include -- 2.30.2