I am mildy confused by the following situation where I have a specialization enabled on is_base_of.
is_base_of requires the full definition of
std::is_base_of requires complete type. which is not the case in
template <typename T>
struct derived : base<T>
{
child<derived> child_; // derived<T> not yet complete here.
typedef T type;
};
For T::base_tag, IIRC (I think POI of child<derived> move from before struct derived to current location in the class), T doesn't need to be complete, and only visited part of it is visible.
So derived::type would not be visible. (but derived::base::type would be).