aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2017-10-27 18:49:36 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2017-10-27 18:49:36 +0100
commit6c6705a90426f383208a482263812cfe2894fa74 (patch)
treedcb96f4ec0c1fd68cfc510e5efab18f42fef21f6
parent5880ce184a6fd92a426d1ca7c48d0a4213a9d8e2 (diff)
downloadgcc-6c6705a90426f383208a482263812cfe2894fa74.zip
gcc-6c6705a90426f383208a482263812cfe2894fa74.tar.gz
gcc-6c6705a90426f383208a482263812cfe2894fa74.tar.bz2
Simplify _Node_insert_return to avoid including <tuple>
* include/bits/node_handle.h (_Node_insert_return::get): Avoid use of std::tie and std::get. From-SVN: r254162
-rw-r--r--libstdc++-v3/ChangeLog3
-rw-r--r--libstdc++-v3/include/bits/node_handle.h37
2 files changed, 35 insertions, 5 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 3668990..796e32c 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,8 @@
2017-10-27 Jonathan Wakely <jwakely@redhat.com>
+ * include/bits/node_handle.h (_Node_insert_return::get): Avoid
+ use of std::tie and std::get.
+
* include/Makefile.am: Put headers in alphabetical order.
* include/Makefile.in: Regenerate.
diff --git a/libstdc++-v3/include/bits/node_handle.h b/libstdc++-v3/include/bits/node_handle.h
index c7694a1..f93bfd7 100644
--- a/libstdc++-v3/include/bits/node_handle.h
+++ b/libstdc++-v3/include/bits/node_handle.h
@@ -37,7 +37,6 @@
# define __cpp_lib_node_extract 201606
#include <optional>
-#include <tuple>
#include <bits/alloc_traits.h>
#include <bits/ptr_traits.h>
@@ -286,22 +285,50 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<size_t _Idx>
decltype(auto) get() &
- { return std::get<_Idx>(std::tie(inserted, position, node)); }
+ {
+ static_assert(_Idx < 3);
+ if constexpr (_Idx == 0)
+ return inserted;
+ else if constexpr (_Idx == 1)
+ return position;
+ else if constexpr (_Idx == 2)
+ return node;
+ }
template<size_t _Idx>
decltype(auto) get() const &
- { return std::get<_Idx>(std::tie(inserted, position, node)); }
+ {
+ static_assert(_Idx < 3);
+ if constexpr (_Idx == 0)
+ return inserted;
+ else if constexpr (_Idx == 1)
+ return position;
+ else if constexpr (_Idx == 2)
+ return node;
+ }
template<size_t _Idx>
decltype(auto) get() &&
{
- return std::move(std::get<_Idx>(std::tie(inserted, position, node)));
+ static_assert(_Idx < 3);
+ if constexpr (_Idx == 0)
+ return std::move(inserted);
+ else if constexpr (_Idx == 1)
+ return std::move(position);
+ else if constexpr (_Idx == 2)
+ return std::move(node);
}
template<size_t _Idx>
decltype(auto) get() const &&
{
- return std::move(std::get<_Idx>(std::tie(inserted, position, node)));
+ static_assert(_Idx < 3);
+ if constexpr (_Idx == 0)
+ return std::move(inserted);
+ else if constexpr (_Idx == 1)
+ return std::move(position);
+ else if constexpr (_Idx == 2)
+ return std::move(node);
}
};