Как мне заставить 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" не помогло.
Кажется, что это должно быть какой-то проблемой конфигурации, но я не смог понять это.