24 boost::describe::has_describe_bases<T>::value
25 && boost::describe::has_describe_members<T>::value && !std::is_union_v<T>>>
27 constexpr auto parse (format_parse_context &ctx)
29 const auto * it = ctx.begin ();
30 const auto * end = ctx.end ();
32 if (it != end && *it !=
'}')
34 throw format_error (
"invalid format");
40 auto format (T
const &t, format_context &ctx)
const
42 using namespace boost::describe;
44 using Bd = describe_bases<T, mod_any_access>;
45 using Md = describe_members<T, mod_any_access>;
47 auto out = ctx.out ();
53 boost::mp11::mp_for_each<Bd> ([&] (
auto D) {
61 out = fmt::format_to (out,
" {}", (
typename decltype (D)::type
const &) t);
64 boost::mp11::mp_for_each<Md> ([&] (
auto D) {
72 out = fmt::format_to (out,
" .{}={}", D.name, t.*D.pointer);