使用G ++ 4.2.1編譯此代碼:錯誤的私人基類無法訪問?
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
};
我得到:
bug.cpp:1: error: ‘struct S’ is inaccessible
bug.cpp:11: error: within this context
但是,如果我改變wrap_rep
類使用ST
:
class wrap_rep : public rep_base<ref_count< ST<int> > > {
typedef rep_base<ref_count< ST<int> > > base_type;
};
它編譯罰款。或者,如果我將原始代碼更改爲:
class wrap_rep : public rep_base<ref_count<S> > {
typedef rep_base<ref_count<::S> > base_type; // now using ::
};
它也編譯得很好。對我來說,原來的代碼看起來很好。這是一個g ++的錯誤?如果不是,那麼爲什麼使用模板工作?而對於另一種情況,爲什麼需要::S
?
但是爲什麼代碼與模板基類一起工作? – 2010-07-12 04:49:42