1 // Copyright (c) 2016-2022 Antony Polukhin
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #ifndef BOOST_PFR_DETAIL_STDTUPLE_HPP
7 #define BOOST_PFR_DETAIL_STDTUPLE_HPP
10 #include <boost/pfr/detail/config.hpp>
12 #include <utility> // metaprogramming stuff
15 #include <boost/pfr/detail/sequence_tuple.hpp>
17 namespace boost { namespace pfr { namespace detail {
19 template <class T, std::size_t... I>
20 constexpr auto make_stdtuple_from_tietuple(const T& t, std::index_sequence<I...>) noexcept {
21 return std::make_tuple(
22 boost::pfr::detail::sequence_tuple::get<I>(t)...
26 template <class T, std::size_t... I>
27 constexpr auto make_stdtiedtuple_from_tietuple(const T& t, std::index_sequence<I...>) noexcept {
29 boost::pfr::detail::sequence_tuple::get<I>(t)...
33 template <class T, std::size_t... I>
34 constexpr auto make_conststdtiedtuple_from_tietuple(const T& t, std::index_sequence<I...>) noexcept {
36 std::add_lvalue_reference_t<std::add_const_t<
37 std::remove_reference_t<decltype(boost::pfr::detail::sequence_tuple::get<I>(t))>
40 boost::pfr::detail::sequence_tuple::get<I>(t)...
44 }}} // namespace boost::pfr::detail
46 #endif // BOOST_PFR_DETAIL_STDTUPLE_HPP