1

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」を省略しても効果はありませんでした。

これは何らかの設定の問題のようですが、私はそれを理解できませんでした。

4

0 に答える 0