first и second это dependent names. Для dependent names правила lookup при name resolution имеют нюансы. (См. об этом в священных книгах п. 14.6.2/3). В частности, если базовый класс зависит от параметров темплейта (а в данном примере он зависит), то unqualified name в теле наследника не будет по умолчанию разыскиваться в базовом классе.
Как уже отметили некоторые постеры, многие компалеры по доброте душевной ослабляют это требование и находят имя, даже если оно в базовом классе. Но по Стандарту требуется fully qualified имя. Пример из 14.6.2/3:
typedef double A;
template<class T> class B {
typedef int A;
};
template<class T> struct X : B<T> {
A a; // a has type double
};
Раз он в море закинул невод...
Date: 2009-12-01 04:25 pm (UTC)Как уже отметили некоторые постеры, многие компалеры по доброте душевной ослабляют это требование и находят имя, даже если оно в базовом классе. Но по Стандарту требуется fully qualified имя. Пример из 14.6.2/3: