aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2017-01-26 18:32:55 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2017-01-26 18:32:55 +0000
commit3e5fb20f1ffbc71f7593460dd28873025e03c64a (patch)
tree0c141a8fa2968edea9210e0b3a1e9619c441c5b9
parentb3db8d779a466722b3c232839c3a41a2fec195cd (diff)
downloadgcc-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/ChangeLog16
-rw-r--r--libstdc++-v3/include/bits/c++config30
-rw-r--r--libstdc++-v3/include/experimental/bits/erase_if.h7
-rw-r--r--libstdc++-v3/include/experimental/bits/lfts_config.h6
-rw-r--r--libstdc++-v3/include/experimental/string_view19
-rw-r--r--libstdc++-v3/include/std/string_view21
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>