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&lt; char * const, INT&GT;初始化 std :: pair&lt; char *,int&gt;。
为什么会发生这种情况以及如何让Sun Studio忽略这一点的任何想法。我正在使用第三方库,为这类事情重写会很痛苦。
答案 0 :(得分:4)
它与Sun的std库似乎是known issue。
您最好的选择可能是说服代码的作者用以下内容替换作业:
p1 = std::make_pair(p2.first, p2.second);
或在施工时间:
std::pair<char*, int> p1(p2.first, p2.second);
答案 1 :(得分: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)
,它从first
的相应成员初始化成员second
和p
,执行根据需要隐式转换。