]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/pfr/detail/stdtuple.hpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / boost / pfr / detail / stdtuple.hpp
1 // Copyright (c) 2016-2022 Antony Polukhin
2 //
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)
5
6 #ifndef BOOST_PFR_DETAIL_STDTUPLE_HPP
7 #define BOOST_PFR_DETAIL_STDTUPLE_HPP
8 #pragma once
9
10 #include <boost/pfr/detail/config.hpp>
11
12 #include <utility> // metaprogramming stuff
13 #include <tuple>
14
15 #include <boost/pfr/detail/sequence_tuple.hpp>
16
17 namespace boost { namespace pfr { namespace detail {
18
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)...
23 );
24 }
25
26 template <class T, std::size_t... I>
27 constexpr auto make_stdtiedtuple_from_tietuple(const T& t, std::index_sequence<I...>) noexcept {
28 return std::tie(
29 boost::pfr::detail::sequence_tuple::get<I>(t)...
30 );
31 }
32
33 template <class T, std::size_t... I>
34 constexpr auto make_conststdtiedtuple_from_tietuple(const T& t, std::index_sequence<I...>) noexcept {
35 return std::tuple<
36 std::add_lvalue_reference_t<std::add_const_t<
37 std::remove_reference_t<decltype(boost::pfr::detail::sequence_tuple::get<I>(t))>
38 >>...
39 >(
40 boost::pfr::detail::sequence_tuple::get<I>(t)...
41 );
42 }
43
44 }}} // namespace boost::pfr::detail
45
46 #endif // BOOST_PFR_DETAIL_STDTUPLE_HPP