2

VC10とGCC4.4は以下を受け入れますが、SunStudio12は受け入れません。

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

Sun Studio12の文句:

エラー:std :: pair <char * const、int>を使用してstd :: pair <char *、int>を初期化することはできません。

これが発生している理由と、SunStudioにこれを無視させる方法についてのアイデア。私はサードパーティのライブラリを使用していますが、この種のことだけを書き直すのは面倒です。

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

libCstdではなくlibstlportを使用していることを確認していますか?参照: https ://stackoverflow.com/a/4481452/196844

これは間違いなくSTL実装のエラーです。C ++ 98標準のセクション20.2.2、ペアは、メンバーを初期化し、の対応するメンバーから、必要に応じて暗黙的な変換を実行するテンプレートコンストラクターをtemplate <class U, class V> pair(const pair<U, V>& p)提供します。firstsecondp

于 2011-12-20T15:08:53.717 に答える