Simplify _Node_insert_return to avoid including <tuple>
authorJonathan Wakely <jwakely@redhat.com>
Fri, 27 Oct 2017 17:49:36 +0000 (18:49 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Fri, 27 Oct 2017 17:49:36 +0000 (18:49 +0100)
* include/bits/node_handle.h (_Node_insert_return::get): Avoid
use of std::tie and std::get.

From-SVN: r254162

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/node_handle.h

index 3668990..796e32c 100644 (file)
@@ -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.
 
index c7694a1..f93bfd7 100644 (file)
@@ -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);
        }
     };