2

VC10 和 GCC 4.4 接受以下内容,而 Sun Studio 12 不接受:

std::pair<char*, int> p1;
std::pair<char* const, int> p2;
p1 = p2

Sun Studio 12 抱怨:

错误:不能使用 std::pair<char*const, int> 来初始化 std::pair<char*, int>。

任何想法为什么会发生这种情况以及我如何让 Sun Studio 忽略这一点。我正在与第三方库合作,仅仅为这种事情重写会很痛苦。

4

2 回答 2

4

这似乎是 Sun 的 std 库的一个已知问题

您最好的选择可能是说服代码的作者将分配替换为:

p1 = std::make_pair(p2.first, p2.second);

或在施工时:

std::pair<char*, int> p1(p2.first, p2.second);
于 2011-12-20T15:09:02.897 回答
2

你确定使用 libstlport 而不是 libCstd 吗?请参阅: https ://stackoverflow.com/a/4481452/196844

这绝对是 STL 实现中的错误。C++98 标准的第 20.2.2 节,Pairs 提供了模板构造函数template <class U, class V> pair(const pair<U, V>& p),它初始化成员firstsecond从 的相应成员p,根据需要执行隐式转换。

于 2011-12-20T15:08:53.717 回答