]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/pfr/test/run/for_each_field.cpp
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 #include <boost/pfr/core.hpp>
7 #include <boost/core/lightweight_test.hpp>
10 // Test case was inspired by Bruno Dutra. Thanks!
18 std::ostream
& operator <<(std::ostream
& os
, color c
) {
36 constexpr my_constexpr() {}
39 std::ostream
& operator <<(std::ostream
& os
, my_constexpr
) {
61 std::size_t control
= 0;
64 boost::pfr::for_each_field(v
, [&control
](auto&& val
, std::size_t i
) {
65 BOOST_TEST_EQ(i
, control
);
69 BOOST_TEST_EQ(control
, 1);
73 boost::pfr::for_each_field(array
, [&control
](auto&& val
, std::size_t i
) {
74 BOOST_TEST_EQ(i
, control
);
78 BOOST_TEST_EQ(control
, 10);
81 boost::pfr::for_each_field(reg
{42, 'a', {}, color::green
, "hello world!"}, [&ss
](auto&& val
, std::size_t i
) {
87 BOOST_TEST_EQ(std::string("42, a, {}, green, hello world!"), ss
.str());
91 boost::pfr::for_each_field(reg
{42, 'a', {}, color::green
, "hello world!"}, [&ss
, &control
](auto&& val
, auto i
) {
92 if (!!decltype(i
)::value
) {
95 BOOST_TEST_EQ(decltype(i
)::value
, control
);
99 BOOST_TEST_EQ(std::string("42, a, {}, green, hello world!"), ss
.str());
102 boost::pfr::for_each_field(reg
{42, 'a', {}, color::green
, "hello world!"}, [&ss
](auto&& val
) {
105 BOOST_TEST_EQ(std::string("42 a {} green hello world! "), ss
.str());
109 boost::pfr::for_each_field(simple
{42, 'a', 3}, [&ss
](auto&& val
) {
112 BOOST_TEST_EQ("42 a 3 ", ss
.str());
115 boost::pfr::for_each_field(empty
{}, [&ss
](auto&& val
) {
118 BOOST_TEST_EQ("", ss
.str());
121 return boost::report_errors();