のvalue_typeastd::vector<T>はT(§23.3.6.1) です。
の値は、is_samecv 修飾子を考慮に入れます (§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ここでは間違っているようです。