You will need typename
typename A::Int b;
The typename keyword is required because the element refers to the use of the qualified name A::Int .
Int c excellent, because in this case a qualified name is not used.
14.6 / 6
In a class template definition or class template member definition, the typename keyword is not required when referring to the unqualified name of a previously declared class template element that declares a type. The typename keyword is always specified when a member refers to the use of a qualified name , even if the qualifier is simply the name of a class template.
source share