環境: STLPort 5.1.4 を使用する VS2005 C++。
次のコード スニペットをコンパイルします。
std::string copied = "asdf";
char ch = 's';
copied.insert(0,1,ch);
エラーが表示されます:
Error 1 error C2668: 'stlpx_std::basic_string<_CharT,_Traits,_Alloc>::insert' : ambiguous call to overloaded function
問題は、文字列オブジェクトに対する挿入メソッドの呼び出しにあるようです。
定義された 2 つのオーバーロードは次のとおりです。
void insert ( iterator p, size_t n, char c );
string& insert ( size_t pos1, size_t n, char c );
しかし、STLPort が単純な char* を反復子として使用することを考えると、私のコードの挿入メソッドのリテラル 0 はあいまいです。
したがって、次のようなヒントを与えることで問題を簡単に克服できますが、
copied.insert(size_t(0),1,ch);
私の質問は次のとおりです。この過負荷と可能性のあるあいまいさは、仕様で意図的に行われていますか? それとも、特定の STLPort 実装の意図しない副作用でしょうか?
(Microsoft が提供する STL には、ネイキッド ポインターの代わりに反復子のクラスがあるため、この問題がないことに注意してください)