C++标准中的局部类定义,居然在visual studio 2003 .net滴编译器还只认类型定义时的的局部类型定义,比如:
class T {
   struct X {
   };
public:
   void foo();
};
倒是能通过编译,可最近些了这样的代码:
// 继续使用上面的code哦
void T::foo() {
   struct Y{
      //...
   };
   // use type Y in here
   //...
}
这个时候vc71那个编译器就报错了!
好在同僚的visual studio 2005 .net滴c++ compiler能支持此种情况.所以,考虑到compilet对代码的兼容性,我做了个折衷,写了这样的代码:
// 原来的xxx.h
class T {
   struct X {
   };
public:
   void foo();
};

// 在使用这个类型Y的xxx.cpp中使用namespace {}
// ...
namespace
{
   struct Y {
   };
}   // end of ::

void T::foo() {
   // use type Y in here
   //...
}

此处使我想起了Loki库中的另一折衷方案:
namespace Private
{
   struct Y
   {
   };
}   // end of ::Private
真是老手写的啦,这里不仅保留了对名称标识的控制权,还避免了觅名namespace被嵌套在另一namespace时的尴尬情形.

所以这里给自己提个醒:当很确定一个类型只被临时用于一个文件域内时,才使用anoymous namespace.