Low priority problem with the typename(...) syntax:
struct A {};
struct B : A {};
//struct BCopy1 : typename(get<0>($B.bases()).type()) {};
//// ^ "error: 'typename' is redundant; base classes are implicitly types"
using B_base0 = typename(get<0>($B.bases()).type());
struct BCopy2 : B_base0 {}; //Works
The fix I suppose is that wherever Clang is throwing the "typename is redundant" error after a parse, it should now parse just beyond the typename to see if a left parens follows, and only throw the error if it doesn't.