Message ID | 20171027175329.GA30253@redhat.com |
---|---|
State | New |
Headers | show |
Series | Simplify _Node_insert_return to avoid including <tuple> | expand |
Um, why are those member get's there at all (and with an index mapping that doesn't agree with the member order)? [container.insert.return] says that "It has no base classes or members other than those specified."
On 02/11/17 18:00 -0400, Tim Song wrote: >Um, why are those member get's there at all (and with an index mapping >that doesn't agree with the member order)? [container.insert.return] >says that "It has no base classes or members other than those >specified." Because I forgot to implement https://wg21.link/p0508r0 which changed the spec, including the order of the members. I'll do that shortly, thanks.
On 03/11/17 09:29 +0000, Jonathan Wakely wrote: >On 02/11/17 18:00 -0400, Tim Song wrote: >>Um, why are those member get's there at all (and with an index mapping >>that doesn't agree with the member order)? [container.insert.return] >>says that "It has no base classes or members other than those >>specified." > >Because I forgot to implement https://wg21.link/p0508r0 which changed >the spec, including the order of the members. > >I'll do that shortly, thanks. > Fixed by this patch, tested powerpc64le-linux, committed to trunk. commit a13d8a5a5620bbcc44ac6d6a1065e9c5d425b629 Author: Jonathan Wakely <jwakely@redhat.com> Date: Fri Nov 3 09:48:59 2017 +0000 Remove _Node_insert_return::get() member functions (P0508R0) * include/bits/node_handle.h (_Node_insert_return::get): Remove, as per P0508R0. diff --git a/libstdc++-v3/include/bits/node_handle.h b/libstdc++-v3/include/bits/node_handle.h index f93bfd7f686..4a830630c89 100644 --- a/libstdc++-v3/include/bits/node_handle.h +++ b/libstdc++-v3/include/bits/node_handle.h @@ -282,54 +282,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Iterator position = _Iterator(); bool inserted = false; _NodeHandle node; - - template<size_t _Idx> - decltype(auto) get() & - { - 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 & - { - 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() && - { - 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 && - { - 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); - } }; _GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/bits/node_handle.h b/libstdc++-v3/include/bits/node_handle.h index c7694a1e0ef..f93bfd7f686 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); } };