1

我在 Windows 上安装了 Digital Mars C/C++ 编译器。这是包含预建 STLPort 的完整付费版本)它是 dm852.zip,但 dmc 报告 8.42n。STLPort 在自述文件中说版本 4.5.3。

根据使用 STLPort 的要求,我将 sc.ini 更新为:

INCLUDE="%@P%..\stlport\stlport";"%@P%..\include";%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 的 Digital Mars 版本似乎配置为不使用 rel_ops 命名空间(dm/stlport/stlport/config/stl_dm.h 中的#define _STLP_NO_RELOPS_NAMESPACE),但省略“使用命名空间 std::rel_ops”没有帮助。

看来这一定是某种配置问题,但我无法弄清楚。

4

0 回答 0