solaris (libCstd) 上的 std::sort 问题

Posted

技术标签:

【中文标题】solaris (libCstd) 上的 std::sort 问题【英文标题】:std::sort problem on solaris (libCstd) 【发布时间】:2011-02-28 09:09:23 【问题描述】:

我在使用 Sun Studio 编译器的 Solaris 上遇到问题,这很可能是由于使用了奇怪的 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和自定义的比较函子,但即使是这个简单的版本也行不通。

【问题讨论】:

你能贴出 C 的样子吗? 【参考方案1】:

看起来你的实际向量是常量。它是在 const 成员函数中访问的成员变量吗?是 const 函数参数吗?

【讨论】:

愚蠢的我。非常感谢!我非常专注于“这肯定又是这个愚蠢的 STL 实现”......抱歉打扰大家了。【参考方案2】:
#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

【讨论】:

以上是关于solaris (libCstd) 上的 std::sort 问题的主要内容,如果未能解决你的问题,请参考以下文章

solaris 上的 ppoll

Java:Solaris 上的 AWT [关闭]

您如何识别 Solaris 上的 Informix 版本?

什么进程正在监听 Solaris 上的某个端口?

Solaris 上的 GCC - 在“0x00000002”之前解析错误

Solaris 10 SPARC 64 上的 Protobuf-2.6.1 编译错误