在VS 2015中报告了const vector <const t =“”>的编译器错误,但未报告VS 2013

时间:2015-09-30 11:31:44

标签: c++11 visual-studio-2013 vector const 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 };
}

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

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

我见过各种帖子,特别是这个帖子Does C++11 allow vector<const T>?,关于vector<const T>以及为什么不允许这样做,但我真的没有。但是,在上面的例子中,向量本身是常量。

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

1 个答案:

答案 0 :(得分:1)

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

标准中的任何地方都没有例外
当容器本身为const

所以是的,VS 2013无法成功编译。