Как мне заставить STL std::rel_ops работать с компилятором Digital Mars C++ с STLPort?

Я установил компилятор Digital Mars C/C++ в Windows. Это полная платная версия, которая включает в себя предварительно собранный STLPort) Это dm852.zip, но dmc сообщает о 8.42n. STLPort сообщает версию 4.5.3 в файле readme.

Как требуется для использования 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;
}

Я могу найти реальный код relops в dm/stl/stl_relops.h

Но я не уверен, как этот код должен быть включен в утилиту dm / stlport / stlport /

Версия STLPort для Digital Mars, по-видимому, настроена так, чтобы не использовать пространство имен rel_ops (#define _STLP_NO_RELOPS_NAMESPACE в dm/stlport/stlport/config/stl_dm.h), но опускание "использование пространства имен std::rel_ops" не помогло.

Кажется, что это должно быть какой-то проблемой конфигурации, но я не смог понять это.

0 ответов

Другие вопросы по тегам