Hi,
Since 3.4, (template-)dependent lookup has been changed to conform
to the standard. In particular, from http://gcc.gnu.org/gcc-3.4/changes.html:
"In a template definition, unqualified names will no longer find members
of a dependent base."
This allows lookups to be bound at template instantiation time.
(Consider the case where Two<foo> is specialized after Three<T> is
defined, but before Three<foo> is instantiated.)
Two<T> is a dependent base of Three<T>. Another way of qualifying the
name to lookup is to use "this->m_Public".
HTH
Fang
> test.cpp: In constructor 'Three<T>::Three()':
> test.cpp:20: error: 'm_Public' was not declared in this scope
>
> class One
> {
> public:
> One();
> ~One();
>
> public:
> int m_Public;
> };
>
> template <class T> class Two : public One
> {
> public:
> Two() {m_Public = 0;}
> };
>
> template <class T> class Three : public Two<T>
> {
> public:
> Three() {m_Public = 0;}
> };