[Bug c++/21644] New: protected members of templated base class not accessible in derived class

tonne2005 at gehheimdienst dot de gcc-bugzilla@gcc.gnu.org
Wed May 18 12:36:00 GMT 2005


See the following code example:

#include <iostream>

template <typename tn>
class a{
protected:
	tn bar;
public:
	a(tn bar){
		this->bar=bar;
	}
	virtual tn getBar(){
		return bar;
	}
};

template <typename tn>
class b : public a<tn>{
private:
	void add(tn baz); 
public:
	b(tn bar, tn baz)
		: a<tn>(bar)
	{
		add(baz);
	}
};

template <typename tn>
void b<tn>::add(tn baz){
	bar+=baz;
}

int main(){
	b<unsigned> test(7,5);
	std::cout << test.getBar() << std::endl;
	return 0;
}

This gives
test.cpp: In member function `void b<tn>::add(tn)':
test.cpp:30: error: `bar' undeclared (first use this function)
test.cpp:30: error: (Each undeclared identifier is reported only once for each
function it appears in.)
As well as it's (in my and the opinion of ##c++) valid ANSI C++.

-- 
           Summary: protected members of templated base class not accessible
                    in derived class
           Product: gcc
           Version: 3.4.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: tonne2005 at gehheimdienst dot de
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i386-redhat-linux
  GCC host triplet: i386-redhat-linux
GCC target triplet: i386-redhat-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21644



More information about the Gcc-bugs mailing list