diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2017-01-26 18:32:55 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2017-01-26 18:32:55 +0000 |
commit | 3e5fb20f1ffbc71f7593460dd28873025e03c64a (patch) | |
tree | 0c141a8fa2968edea9210e0b3a1e9619c441c5b9 | |
parent | b3db8d779a466722b3c232839c3a41a2fec195cd (diff) | |
download | gcc-3e5fb20f1ffbc71f7593460dd28873025e03c64a.zip gcc-3e5fb20f1ffbc71f7593460dd28873025e03c64a.tar.gz gcc-3e5fb20f1ffbc71f7593460dd28873025e03c64a.tar.bz2 |
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
-rw-r--r-- | libstdc++-v3/ChangeLog | 16 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/c++config | 30 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/bits/erase_if.h | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/bits/lfts_config.h | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/string_view | 19 | ||||
-rw-r--r-- | 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 2fc38c9..1428ffe 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,21 @@ 2017-01-26 Jonathan Wakely <jwakely@redhat.com> + 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 bc1ab5f..3b694e0 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 c4ac282..7dc47db 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<typename _Container, typename _Predicate> 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 97f090f..a9faa47 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 2a2364c..bd212ac 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<typename _Tp = void> - struct __identity - { typedef _Tp type; }; - - template<> - struct __identity<void>; - +_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<typename _Tp> - using __idt = typename __identity<_Tp>::type; + using __idt = common_type_t<_Tp>; +_GLIBCXX_END_NAMESPACE_VERSION } +_GLIBCXX_BEGIN_NAMESPACE_VERSION + template<typename _CharT, typename _Traits> 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 a719185..311d6d7 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<typename _Tp = void> - struct __identity - { typedef _Tp type; }; - - template<> - struct __identity<void>; - + // 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<typename _Tp> - 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<hash<u32string_view>> : 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<char> operator""sv(const char* __str, size_t __len) @@ -666,11 +662,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return basic_string_view<char32_t>{__str, __len}; } #endif - _GLIBCXX_END_NAMESPACE_VERSION +_GLIBCXX_END_NAMESPACE_VERSION } // namespace string_literals } // namespace literals -_GLIBCXX_END_NAMESPACE_VERSION } // namespace std #include <bits/string_view.tcc> |