糟糕的编译器不支持C++(98/03)的功能吗?

peo*_*oro 9 c++ compiler-construction

我经常阅读一些软件,删除一些C++特性,以便与穷人/旧/异国情调的C++编译器兼容.

是我进入的最后一个:Box2D没有使用名称空间,因为他们需要支持:

糟糕的C++编译器,其命名空间支持可能不稳定

我能想到的一个更大的例子是Qt,它依赖于MOC,正在限制模板的使用,并且正在避免使用模板(嗯,这对于Qt3和以前的版本来说至少是正确的,Qt4主要是为了遵守它们的约定).


我想知道哪些编译器很差?
那里有很多C++编译器(我从来没有听说过它们中的大多数),但是我希望它们都支持最常见的(/简单的)C++特性,比如命名空间(除非它们已经死了); 不是这样的吗?

什么是最不受支持的功能?
我很容易发现缺少外部模板,可能是模板部分特化和类似功能.最多甚至是RTTI或异常,但我从未怀疑过命名空间.

Edw*_*nge 8

根据我的经验,人们只是害怕新事物,特别是20年前曾经破坏过的东西.在本世纪编写的任何内容中都没有正当理由反对使用命名空间.

如果你正在寻找可以抛弃的东西,如果你不久之前碰巧瞄准的是Windows,你不仅要做的不仅仅是用C++抛出功能而不是使用它们,你必须使用不同的语法.模板作为VC中支持的功能之一而浮现在脑海中.他们变得更好但有时仍然失败.

该特定编译器不支持的另一个(STILL!)是重载虚函数,以返回使用MI时基本版本返回的类型的派生类型指针.VC只是简单地吓坏了,你最终不得不这样做virtual_xxx()并提供非虚拟的"xxx()"函数来复制标准行为.

  • VC认为PS协变返回类型从版本7开始支持,我认为它是在2001年左右发布的. (4认同)
  • @Billy:这种语言在上个世纪是标准化的. (3认同)