const到非const指针模板参数转换

时间:2011-12-20 14:48:54

标签: c++ sunstudio

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忽略这一点的任何想法。我正在使用第三方库,为这类事情重写会很痛苦。

2 个答案:

答案 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的相应成员初始化成员secondp,执行根据需要隐式转换。