aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2018-06-14 15:01:29 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2018-06-14 15:01:29 +0100
commit74755c6afcf45be8723e30f08b6e38ec105a636a (patch)
tree95c6dd5820822f26417358663c9ee419c55a7ba1
parent75b5bc017bbeb83768564a3bd8128e382d327102 (diff)
downloadgcc-74755c6afcf45be8723e30f08b6e38ec105a636a.zip
gcc-74755c6afcf45be8723e30f08b6e38ec105a636a.tar.gz
gcc-74755c6afcf45be8723e30f08b6e38ec105a636a.tar.bz2
Define __cpp_lib_tuple_element_t in <tuple> not <utility>
* include/std/tuple (__cpp_lib_tuple_element_t): Move feature test macro from <utility> and change type to long. * include/std/utility (__cpp_lib_tuple_element_t): Remove. * testsuite/20_util/tuple/tuple_element_t.cc: Check for feature test macro. From-SVN: r261596
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/include/std/tuple10
-rw-r--r--libstdc++-v3/include/std/utility7
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc6
4 files changed, 21 insertions, 8 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 738b7ac..5f61223 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,11 @@
2018-06-14 Jonathan Wakely <jwakely@redhat.com>
+ * include/std/tuple (__cpp_lib_tuple_element_t): Move feature test
+ macro from <utility> and change type to long.
+ * include/std/utility (__cpp_lib_tuple_element_t): Remove.
+ * testsuite/20_util/tuple/tuple_element_t.cc: Check for feature test
+ macro.
+
P0935R0 Eradicating unnecessarily explicit default constructors
* include/bits/random.h (uniform_real_distribution::param_type)
(normal_distribution::param_type, lognormal_distribution::param_type)
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
index 16f6922..0f89050 100644
--- a/libstdc++-v3/include/std/tuple
+++ b/libstdc++-v3/include/std/tuple
@@ -1298,6 +1298,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
"tuple index is in range");
};
+#if __cplusplus >= 201402L
+#define __cpp_lib_tuple_element_t 201402L
+
+ template<size_t __i, typename _Tp>
+ using tuple_element_t = typename tuple_element<__i, _Tp>::type;
+#endif
+
template<std::size_t __i, typename _Head, typename... _Tail>
constexpr _Head&
__get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
@@ -1338,7 +1345,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return std::forward<const __element_type&&>(std::get<__i>(__t));
}
-#if __cplusplus > 201103L
+#if __cplusplus >= 201402L
#define __cpp_lib_tuples_by_type 201304
@@ -1470,6 +1477,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 2275. Why is forward_as_tuple not constexpr?
+ /// std::forward_as_tuple
template<typename... _Elements>
constexpr tuple<_Elements&&...>
forward_as_tuple(_Elements&&... __args) noexcept
diff --git a/libstdc++-v3/include/std/utility b/libstdc++-v3/include/std/utility
index c969500..7bf80de 100644
--- a/libstdc++-v3/include/std/utility
+++ b/libstdc++-v3/include/std/utility
@@ -135,13 +135,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef typename add_cv<__tuple_element_t<__i, _Tp>>::type type;
};
-#if __cplusplus > 201103L
-#define __cpp_lib_tuple_element_t 201402
-
- template<std::size_t __i, typename _Tp>
- using tuple_element_t = typename tuple_element<__i, _Tp>::type;
-#endif
-
// Various functions which give std::pair a tuple-like interface.
/// Partial specialization for std::pair
diff --git a/libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc b/libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc
index 8f7aa58..6b1b7a54 100644
--- a/libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc
+++ b/libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc
@@ -19,6 +19,12 @@
#include <tuple>
+#ifndef __cpp_lib_tuple_element_t
+# error "Feature-test macro for tuple_element_t missing"
+#elif __cpp_lib_tuple_element_t != 201402
+# error "Feature-test macro for tuple_element_t has wrong value"
+#endif
+
using namespace std;
struct foo