constexpr std::vector 不适用于 msvc

问题描述 投票:0回答:1

这只是我机器上的错误。它适用于 godbolt 自 v19.29 以来。我的 msvc 是 v19.35.

#include <vector>

constexpr std::size_t f() {
    constexpr std::vector<int> aaa{};
    return 1;
}

int main() {
    constexpr auto a = f();
}

/std:c++latest

ConsoleApplication9.cpp(12,24): error C2131: expression did not evaluate to a constant ConsoleApplication9.cpp(12,24):消息:(子)对象指向在不断评估期间分配的堆内存

编译选项:

/JMC /permissive- /ifcOutput "x64\Debug" /GS /W3 /Zc:wchar_t /ZI /Gm- /Od /sdl /Fd"x64\Debug c143.pdb" /Zc:inline /fp:precise /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /std:c++latest /FC /Fa"x64\Debug " /EHsc /nologo /Fo"x64\Debug" /Fp"x64\Debug\ConsoleApplication9.pch" /diagnostics:column

c++ visual-studio visual-c++ c++20 constexpr
1个回答
2
投票

std::vector

 不应该有 
constexpr
 说明符 
https://stackoverflow.com/a/69498591/11998382。以下作品

constexpr std::size_t f() { std::vector<int> aaa{}; return 1; }

我认为 godbolt 编译这个是错误的。 constexpr

 函数可以在运行时求值,但是 
std::vector
 不能是 
constexpr
 在这个函数的运行时版本中(也许有人能更好地表达这个)。

© www.soinside.com 2019 - 2024. All rights reserved.