次のコードを考えてみましょう。
class T;
void constructVector(const T* item)
{
std::vector<T*> v;
v.push_back(item);
}
MSVC 2010 コンパイラで次のエラーが発生します。
エラー: C2664: 'void std::vector<_Ty>::push_back(_Ty &&)' : パラメータ 1 を 'const T *' から 'T *&&' に [ _Ty=T * ] で変換できません 変換で修飾子が失われます
この特定の変換が違法であることはわかりますが、私のコードが意味的に間違っているとは思いません。またpush_back(const T&)
、バリエーションがあると思いますが、それが私の呼び出しに一致しないのはなぜですか?