Yes.
You have to tell the compiler about dependent names when they're types
(you've done that, added `typename`) and when they're templates (need to
add `template`):
template <class Traits>
struct A
{
typedef typename Traits::template vec<int> v1_t; // (1)
using v2_t = typename Traits::template vec<int>; // (2)
};
Cheers & hth.,
- Alf