[Bug c++/34184] New: Scope broken for inherited members inside template class?
scovich at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Nov 22 05:21:00 GMT 2007
The following code fails to compile
this.cpp: In member function 'int foo<T>::baz::foo()':
this.cpp:8: error: 'i' was not declared in this scope
// begin this.cpp
template <class T>
struct foo {
struct bar {
int i;
};
struct baz : bar {
int foo() { return i; }
};
};
int main() { }
// end this.cpp
Changing it to 'this->val' solves the problem, but is unwieldy for classes with
lots of members. I'm unsure what the Standard says, but I thought you only
needed 'this->' when the member depends on information the compiler won't have
until template instantiation time. However, that doesn't really apply here --
foo and bar do not depend on the template's type, so the compiler should be
able to figure things out well before the template gets instantiated.
FWIW Sun's CC accepts the code with no warnings. It's usually much more strict
than gcc (to the point of being really frustrating). Even if the Standard says
gcc is right, it would be very convenient if gcc matched CC on this
"extension".
--
Summary: Scope broken for inherited members inside template
class?
Product: gcc
Version: 4.2.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: scovich at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34184
More information about the Gcc-bugs
mailing list