std :: sort задача на солярисе (libCstd) - PullRequest
1 голос
/ 28 февраля 2011

У меня проблема в Solaris с использованием компилятора Sun Studio, что, скорее всего, связано со странной реализацией STL ( libCstd ), см. http://developers.sun.com/solaris/articles/cmp_stlport_libCstd.html. Учтите это:

std::vector<C*> v;
// .. populate the vector
std::sort(v.begin(), v.end());

, где C - некоторый класс.Это приводит к следующему сообщению об ошибке компилятора:

"/opt/sunstudio12.1/prod/include/CC/Cstd/./algorithm", line 725: Error: The operand "*first" cannot be assigned to.
"/opt/sunstudio12.1/prod/include/CC/Cstd/./algorithm.cc", line 985:     Where: While instantiating "std::__linear_insert<C*const*, C*>(C*const*, C*const*, C**)".
"/opt/sunstudio12.1/prod/include/CC/Cstd/./algorithm.cc", line 985:     Where: Instantiated from std::__insertion_sort<C*const*>(C*const*, C*const*).
"/opt/sunstudio12.1/prod/include/CC/Cstd/./algorithm", line 811:     Where: Instantiated from non-template code.

Кто-нибудь знает, как обойти проблему?Конечно, на самом деле я хочу использовать std::sort с пользовательским функтором сравнения, но даже эта простая версия не работает.

Ответы [ 2 ]

5 голосов
/ 28 февраля 2011

Похоже, ваш фактический вектор является константой. Доступ к переменной-члену в константной функции-члене? Это аргумент константной функции?

3 голосов
/ 28 февраля 2011
#include <algorithm>
#include <vector>

struct C {};

int main()
{
    std::vector<C*> v;
    std::sort(v.begin(), v.end());
}

компилируется без ошибок с

CC: Sun C++ 5.9 SunOS_sparc Patch 124863-19 2009/12/02

, вызванным как

CC lytenyn.cpp
...