Digital Mars C/C++ コンパイラを Windows にインストールしました。これはビルド済みの STLPort を含む完全な有料バージョンです) dm852.zip ですが、dmc は 8.42n を報告します。STLPort は readme でバージョン 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;
}
実際の relops コードは dm/stl/stl_relops.h にあります。
しかし、このコードが dm/stlport/stlport/utility にどのように含まれるかはわかりません
Digital Mars バージョンの STLPort は、rel_ops 名前空間 (#define _STLP_NO_RELOPS_NAMESPACE in dm/stlport/stlport/config/stl_dm.h) を使用しないように構成されているようですが、「using namespace std::rel_ops」を省略しても効果はありませんでした。
これは何らかの設定の問題のようですが、私はそれを理解できませんでした。