のvalue_type
astd::vector<T>
はT
(§23.3.6.1) です。
の値は、is_same
cv 修飾子を考慮に入れます (§20.9.6)。
あなたの場合、それは をチェックすることを意味しますstd::is_same<int, int const>
が、これは失敗するはずです。
これは、観察した動作が標準に従って間違っていることを意味します。MSVC は value_type の cv 修飾子を削除しているようです:
std::vector<const int>::value_type val = 5;
val = 10;
これは MSVC2008 でコンパイルされますが、gcc 4.4 では失敗します。
おそらく、Microsoft にバグ レポートを提出する必要があります。
編集:上記のNawazのコメントは私に考えさせました. この質問 によると、const int
実際には C++03 では value_type として許可されて
いません! それはC ++ 11にあるようですが。. C++11 ではベクトルに対して明示的に禁止されていませんが、アロケータ (§17.6.3.5) では禁止されているため、ベクトルに対しても違法になります。
いずれにせよ、サイレントにドロップする MSVC の動作は、const
ここでは間違っているようです。