// forward declaration necessary to be friend a specific instantiation of a template template <typename T> class Pal; class C { friend class Pal<C>; template <typename T> friend class Pal2; }; template <typename T> class C2 { friend class Pal<T>; // a template declaration for Pal must be in scope //上面这句注释的在作用域内是什么意思?Pal的模板声明明明在class C2的外面 friend class Pal3; //为什么不需要Pal3的前置声明? };
解决方案:20分
1) friend declaration 可以在声明友元的同时,声明一个类/函数。(如果 name lookup 没有找到被声明为友元的类/函数的话)
2) 模板的特化不能在没有类模板的声明的情况下被单独声明。(所以,任何时候如果要使用模板的特化,必须保证至少可以看到模板的声明)
3) 所谓 in scope ,不是说与它在同一个 scope ,可是指在当前 scope 可以通过 name lookup 找到。
2) 模板的特化不能在没有类模板的声明的情况下被单独声明。(所以,任何时候如果要使用模板的特化,必须保证至少可以看到模板的声明)
3) 所谓 in scope ,不是说与它在同一个 scope ,可是指在当前 scope 可以通过 name lookup 找到。