Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-15 08:41:39

0001 // Copyright (c) 2016-2024 Antony Polukhin
0002 //
0003 // Distributed under the Boost Software License, Version 1.0. (See accompanying
0004 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0005 
0006 #ifndef BOOST_PFR_DETAIL_STDTUPLE_HPP
0007 #define BOOST_PFR_DETAIL_STDTUPLE_HPP
0008 #pragma once
0009 
0010 #include <boost/pfr/detail/config.hpp>
0011 
0012 #include <utility>      // metaprogramming stuff
0013 #include <tuple>
0014 
0015 #include <boost/pfr/detail/sequence_tuple.hpp>
0016 
0017 namespace boost { namespace pfr { namespace detail {
0018 
0019 template <class T, std::size_t... I>
0020 constexpr auto make_stdtuple_from_tietuple(const T& t, std::index_sequence<I...>) {
0021     (void)t;  // workaround for MSVC 14.1 `warning C4100: 't': unreferenced formal parameter`
0022     return std::make_tuple(
0023         boost::pfr::detail::sequence_tuple::get<I>(t)...
0024     );
0025 }
0026 
0027 template <class T, std::size_t... I>
0028 constexpr auto make_stdtiedtuple_from_tietuple(const T& t, std::index_sequence<I...>) noexcept {
0029     (void)t;  // workaround for MSVC 14.1 `warning C4100: 't': unreferenced formal parameter`
0030     return std::tie(
0031         boost::pfr::detail::sequence_tuple::get<I>(t)...
0032     );
0033 }
0034 
0035 template <class T, std::size_t... I>
0036 constexpr auto make_conststdtiedtuple_from_tietuple(const T& t, std::index_sequence<I...>) noexcept {
0037     (void)t;  // workaround for MSVC 14.1 `warning C4100: 't': unreferenced formal parameter`
0038     return std::tuple<
0039         std::add_lvalue_reference_t<std::add_const_t<
0040             std::remove_reference_t<decltype(boost::pfr::detail::sequence_tuple::get<I>(t))>
0041         >>...
0042     >(
0043         boost::pfr::detail::sequence_tuple::get<I>(t)...
0044     );
0045 }
0046 
0047 }}} // namespace boost::pfr::detail
0048 
0049 #endif // BOOST_PFR_DETAIL_STDTUPLE_HPP