G++ refuses to compile simple, looking good code
Florian Weimer
fweimer@redhat.com
Fri Jun 14 09:34:00 GMT 2013
On 06/14/2013 11:30 AM, Luchezar Belev wrote:
> Hi,
> i'm not a c++/template guru and i can't decide if this is really a
> valid code or i have encountered a gcc bug:
>
> ------------------------------
> template <class T> struct A {
> void *p;
> };
> template <class T> struct B : A<T> {
> void *foo() { return p; }
> };
> ------------------------------
>
> g++ says "error: 'p' was not declared in this scope".
> microsoft's compiler is happy with the same code.
Current MSVC in standard C++ mode? That's odd.
The compiler doesn't now the members of A<T> when the B template is
compiled. (There might be a partial specialization later in the file.)
Therefore, you must explicitly request dependent name lookup by
dereferencing the this pointer:
template <class T> struct B : A<T> {
void *foo() { return this->p; }
};
--
Florian Weimer / Red Hat Product Security Team
More information about the Gcc-help
mailing list