我在Windows上安装了Digital Mars C / C ++编译器。这是完整付费版本,包括预先构建的STLPort)它是dm852.zip,但dmc报告8.42n。 STLPort在自述文件中说4.5.3版。
根据使用STLPort的要求,我更新了sc.ini:
INCLUDE = “@%P%.. \的STLport \ stlport的”; “%@ P%.. \包括”;%INCLUDE%
以下测试程序使用MinGW g ++进行编译,但dmc会给出注释中显示的错误。
#include <assert.h>
#include <utility>
using namespace std;
using namespace std::rel_ops;
class C {
int x;
public:
C(int x_) : x(x_)
{ }
bool operator<(const C& other) const
{ return x < other.x; }
bool operator==(const C& other) const
{ return x == other.x; }
};
int main() {
C a(1);
C b(1);
C c(2);
assert(a == b);
assert(b != c); // Error: illegal operand types Had: C and C
assert(a < c);
assert(c > a); // Error: illegal operand types Had: C and C
return 0;
}
我可以在dm / stl / stl_relops.h中找到实际的relops代码
但我不确定dm / stlport / stlport / utility如何包含此代码
数字火星版STLPort似乎配置为不使用rel_ops命名空间(dm / stlport / stlport / config / stl_dm.h中的#define _STLP_NO_RELOPS_NAMESPACE),但省略“using namespace std :: rel_ops”没有帮助
似乎这必定是某种配置问题,但我无法弄明白。