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

Reply via email to