la elaboración de este código con g ++ 4.2.1:¿Clase base privada errónea inaccesible?
struct S { };
template<typename T> struct ST { };
template<typename BaseType>
class ref_count : private BaseType { };
template<typename RefCountType>
class rep_base : public RefCountType { };
class wrap_rep : public rep_base<ref_count<S> > {
typedef rep_base<ref_count<S> > base_type; // line 11
};
me sale:
bug.cpp:1: error: ‘struct S’ is inaccessible
bug.cpp:11: error: within this context
Sin embargo, si cambio de la clase wrap_rep
utilizar ST
:
class wrap_rep : public rep_base<ref_count< ST<int> > > {
typedef rep_base<ref_count< ST<int> > > base_type;
};
que compila bien . Alternativamente, si cambio el código original a:
class wrap_rep : public rep_base<ref_count<S> > {
typedef rep_base<ref_count<::S> > base_type; // now using ::
};
también compila bien. Para mí, el código original parece estar bien tal como está. ¿Es esto un error de g ++? Si no, ¿por qué funciona una plantilla? Y, para el otro caso, ¿por qué es necesario el ::S
?
Pero entonces, ¿por qué el código funciona con una clase base de plantilla? –