朋友声明不使用typedef

时间:2017-06-13 15:06:05

标签: c++ templates typedef friend c++03

当我写这样的朋友声明时

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;
};

0 个答案:

没有答案