当我写这样的朋友声明时
template<typename T>
struct Foo {};
struct Bar {
friend class Foo<Bar>;
};
一切都很好。但是,当我使用typedef 时
template<typename T>
struct Foo {};
struct Bar {
typedef Foo<Bar> FooBar;
friend class FooBar;
};
gcc(4.4.7)抱怨
error: using typedef-name ‘Bar::FooBar’ after ‘class’
error: ‘Bar::FooBar’ has a previous declaration here
error: friend declaration does not name a class or function
我一直认为typedef
的行为与输入原始类型的行为完全相同....是否不允许在此处使用typedef
?或者我只是错误地使用它?
PS:模板原来是红鲱鱼,下面会导致同样的错误
struct Foo{};
struct Bar{
typedef Foo FooBar;
friend class FooBar;
};