https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122875
--- Comment #9 from Boris Staletic <boris.staletic at protonmail dot com> ---
>> foo.cpp:10:29: error: uncaught exception of type ‘std::meta::exception’;
>> ‘what()’: ‘invalid argument to can_substitute’
> Isn't that correct? I mean, bases_of returns a vector of reflections of the
> direct base class relationship, something you can't without reflection get
> hand on and use as a template parameter. Using {type_of(bases_of(^^B,
> uctx)[0])} or {parent_of(bases_of(^^B, uctx)[0])} would be meaningful, or
> applying on all members of the vector type_of or parent_of.
So it is. When I wrote the last comment I had been under the impression that
`bases_of()` would return a range of type reflections, but it's indeed a range
of direct base relationships.
That means gcc behaves correctly as far as this bug report is concerned.