g++ 3.2 bug的弥补
在一个C++邮件组中,有一个同志说了一件事,说 g++ 3.2.x(至少到目前的g++ 3.2.3)不支持 sizeof临时对象,我很诧异,虽然我没怎么用过将临时object sizeof,但是至少C++应该是支持的,我做了试验
class test
{
};
cout< < sizeof ( test() );
g++果然报错: 不能 sizeof 一个函数: test().
居然将test()当函数处理了,难道这里有二义性?不可能呀,如果我这么做:
class test
{
public:
test(int i){}
};
int x = 10;
test(x);将产生二义性
如何才能排除这个问题呢?明显是g++的bug.
其实排除很简单,我给他写一个template类就行了,没几行代码:
template < typename T >
struct __sizeof
{
operator T() const { return T(); }
operator int() const { return sizeof(operator T()); }
};
使用的时候只需要: cout< < __sizeof < test >() < < endl;
是不是很简单呢?
不过总体来说,g++是最接近C++标准的编译器之一,有瑕疵是难免的,人为可以绕开bug就行了,呵呵...
DarkSpy