【发布时间】:2017-07-25 10:13:16
【问题描述】:
这是一段在 MSVC 2015 中无法编译的代码(忽略未初始化的值访问):
#include <array>
int main() {
constexpr int x = 5;
auto func = []() {
std::array<int, x> arr;
return arr[0];
};
func();
}
它抱怨说:
'x' cannot be implicitly captured because no default capture mode has been specified
但是x 是constexpr! x 在编译时已知为 5。为什么 MSVC 对此大惊小怪? (它还是另一个 MSVC 错误吗?)GCC 会很高兴地编译它。
【问题讨论】:
-
它很可能是接受它的 GCC 扩展。
-
GCC 现在有太多的扩展。 Clang 不会正确编译它。
标签: c++ visual-c++ lambda c++14 constexpr