整理
This commit is contained in:
39
include/boost/pfr/detail/core26.hpp
Normal file
39
include/boost/pfr/detail/core26.hpp
Normal file
@@ -0,0 +1,39 @@
|
||||
// Copyright (c) 2016-2025 Antony Polukhin
|
||||
// Copyright (c) 2025 Jean-Michaël Celerier
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// boost-no-inspect
|
||||
|
||||
#ifndef BOOST_PFR_DETAIL_CORE26_HPP
|
||||
#define BOOST_PFR_DETAIL_CORE26_HPP
|
||||
#pragma once
|
||||
|
||||
#include <boost/pfr/detail/sequence_tuple.hpp>
|
||||
|
||||
namespace boost::pfr::detail {
|
||||
|
||||
template<class T>
|
||||
constexpr auto tie_as_tuple(T &val) noexcept {
|
||||
static_assert(!std::is_union<T>::value,
|
||||
"====================> Boost.PFR: For safety reasons it is forbidden to reflect "
|
||||
"unions. See `Reflection of unions` section in the docs for more info.");
|
||||
auto &&[... members] = std::forward<T>(val);
|
||||
return sequence_tuple::tuple<std::add_lvalue_reference_t<decltype(members)>...>{members...};
|
||||
}
|
||||
|
||||
template <class T, class F, std::size_t... I>
|
||||
constexpr void for_each_field_dispatcher(T& t, F&& f, std::index_sequence<I...>) {
|
||||
static_assert(
|
||||
!std::is_union<T>::value,
|
||||
"====================> Boost.PFR: For safety reasons it is forbidden to reflect unions. See `Reflection of unions` section in the docs for more info."
|
||||
);
|
||||
std::forward<F>(f)(
|
||||
detail::tie_as_tuple(t)
|
||||
);
|
||||
}
|
||||
|
||||
} // namespace boost::pfr::detail
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user