友元模板和编译器
更多内容参见《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++标准的支持确实不错。
本文通过一个具体的友元模板示例,探讨了不同编译器对C++标准支持的区别。在Dev-C++中遇到编译错误,而在Visual Studio 2005 Beta 2则能成功编译。
3551

被折叠的 条评论
为什么被折叠?



