The code between the dashed lines generates these errors:
test2.cpp: In member function 'void outer_t::inner_derived_t<type_t>::f2()':
test2.cpp:20: error: 'i' was not declared in this scope
command line:
$ cc -o test2 test2.cpp
If i is accessed through "this" pointer, the code compiles:
template <typename type_t>
void outer_t::inner_derived_t<type_t>::f2(void)
{
int i2 = this->i; // <-- this works
}
----------------------------------------
class outer_t {
public:
template <typename type_t>
class inner_t {
protected:
int i;
};
template <typename type_t>
class inner_derived_t : public inner_t<type_t> {
public:
void f2(void);
};
};
template <typename type_t>
void outer_t::inner_derived_t<type_t>::f2(void)
{
int i2 = i; // <-- error
}
int main(int argc, char* argv[])
{
outer_t::inner_derived_t<int> id;
id.f2();
return 0;
}
----------------------------------------
--
Summary: Inherited inner template classes cannot access protected
base data members
Product: gcc
Version: 4.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: support at stonesteps dot ca
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30508