友元模板和编译器
更多内容参见《Exceptional C++ Style》第8条。
代码示例:
namespace boost {
template<typename T>void checked_delete(T *x) {
delete x;
}
}
class Test {
~Test() {}
friend void boost::checked_delete<>(Test *x);
};
int main(int argc, char *argv[])
{
return 0;
}
上述代码在Dev-C++中(g++ version 3.4.2)编译不过,无论是否将红色的<>去掉与否,编译器都提示:
`void boost::checked_delete(Test*)' should have been declared inside `boost'
而使用
Visual Stdio 2005 Beta2来编译,则无论带有
<>都可以成功编译。看来
Visual Stdio 2005对
C++标准的支持确实不错。