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