VC7.1的一个奇怪的bug
2007-08-06 11:00
281 查看
namespace n1
{
struct X{};
int n1_i;
int fn(){return 0;}
}
namespace n2
{
using namespace n1;
enum {_};
}
struct X{};
n1::X x;
X gx; // ::X or n1::X ?, C2872: “X” : 不明确的符号
int i = n1_i; // access n1::n1_i, OK
int i2 = fn(); // access n1::fn, OK
当两个命名空间有如上形式时,第一个命名空间的符号会“泄露”到全局命名空间。泄露发生的充要条件是:n2中using了n1,并且n2中至少有一个枚举项。
这样一来n1中的符号会污染全局命名空间,从而造成无故的符号解析多义,导致C2872编译错误。
如果把n2中的enum {_};改成enum{};则不会发生符号泄露。
在VC8.0上测试没有出现问题。目前还没找到一个较理想的解决办法。
这个bug造成的问题已经影响了我们的开发进度,如果我们使用的是正版VS2003不知道是否可以就此问题起诉微软。
相关文章推荐
- VC7.1 编译器的一个不大不小的bug
- VC7.1 编译器的一个不大不小的bug
- VC7.1 编译器的一个不大不小的bug
- VC7.1 编译器的一个不大不小的bug
- VC7.1 编译器的一个不大不小的bug
- VC7.1 编译器的一个不大不小的bug
- VC7.1 编译器的一个不大不小的bug
- VC7.1 编译器的一个不大不小的bug
- J2ME中一个奇怪的BUG及其解决方法
- vc7.1中nth_element的一个实现优化
- 一个奇怪的bug
- VC6 DEBUG版的一个BUG
- MySQL创建过程,遇到一个奇怪的bug
- 一个奇怪BUG的记录(未根本解决)
- 用递归算法解决VC中CEdit的一个Bug
- 由一个vc内嵌asm的BUG引出的...
- vs2008一个著名的bug:error C2471: cannot update program database vc90.pdb(转帖)
- 很久以前发现的 vc2008 的一个bug(关于模板匹配)
- JWFD工作流设计器一个奇怪的BUG
- 一个奇怪的bug