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).