12 bool separate =
false;
14 void print_separator() {
24 if constexpr (std::is_pointer_v<T> && std::same_as<std::remove_const_t<std::remove_pointer_t<T>>,
char>) {
31 template <category::can_descend T>
32 void descend(T
info) {
42 using type =
typename T::type;
45 if constexpr (
requires {
typename type::value_type; }) {
49 if constexpr (
requires {
50 typename type::key_type;
51 typename type::mapped_type;
69 template <category::has_members T>
76 template <category::has_alternatives T>
79 T::alternatives::for_each([
this, first=
true]<
typename U>()
mutable {
89 template <category::has_enumerator_names T>
92 for (
auto const& name :
info.enumerator_names) {
93 if (&*
info.enumerator_names.begin() != &name) {
100 template <category::has_extent T>
101 requires requires {
typename T::element_type; }