// Copyright 2021 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include namespace desc = boost::describe; template class L, class... D> auto struct_to_tuple_impl( T const& t, L ) { return std::make_tuple( t.*D::pointer... ); } template, class En = std::enable_if_t::value> > auto struct_to_tuple( T const& t ) { return struct_to_tuple_impl( t, Dm() ); } #include #include struct X { int a = 1; }; BOOST_DESCRIBE_STRUCT(X, (), (a)) struct Y { float b = 3.14f; }; BOOST_DESCRIBE_STRUCT(Y, (), (b)) struct Z: X, Y { }; BOOST_DESCRIBE_STRUCT(Z, (X, Y), ()) int main() { Z z; auto tp = struct_to_tuple( z ); std::cout << boost::core::type_name() << ": " << std::get<0>(tp) << ", " << std::get<1>(tp); }