我在 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”没有帮助。
看来这一定是某种配置问题,但我无法弄清楚。