报告了VS 2015中const vector <const T>的编译器错误,但未报告VS 2013

ksl*_*ksl 15 const vector c++11 visual-studio-2013 visual-studio-2015

以下代码使用Visual Studio 2013编译正常.

#include <vector>
#include <string>

int main()
{
    const std::string constString("fred");
    const std::vector<const std::string> myVector{ constString };
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用Visual Studio 2015编译它,则会报告以下错误:

1>xmemory0(587): error C2338: The C++ Standard forbids containers of const elements because allocator<const T> is ill-formed.

我见过各种帖子,特别是这个帖子C++ 11允许vector <const T>吗?,关于vector<const T>以及为什么它不被允许,但我真的不明白.但是,在上面的例子中,向量本身是const.

有人可以解释一下吗?VS 2013成功编译是错误的吗?

sp2*_*nny 2

Standard   Requirement for T
========   =================
C++03      any type
C++11      any non-const, non-reference object type
C++14      any non-const object type
C++17      any cv-unqualified object type
Run Code Online (Sandbox Code Playgroud)


标准中没有任何地方对容器本身的情况做出例外规定const

所以是的,VS 2013编译成功是错误的。