// 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 找到。