【发布时间】:2017-05-17 16:00:44
【问题描述】:
Visual Studio 编译器 (MSVC 2015) 无法编译以下简单代码:
int main() {
auto foo = [](auto callback) {
callback(int{});
};
auto rexs = [&foo]() {
foo([](auto tg) {});
};
}
它会引发内部编译器错误:
fatal error C1001: An internal error has occurred in the compiler.
VC++ 喜欢在编译的代码包含错误时给出错误C1001(即程序员犯了错误,但 VC++ 只是没有完全识别代码中的错误),所以我想知道我是否可以犯这里有一个错误。
但是,从我所看到的所有角度来看,我的代码看起来都符合标准,而且对我来说这似乎是一个 VC++ 错误。我想对了吗?
【问题讨论】:
-
“编译器出现内部错误。”无论复制代码是否有效,始终是一个错误(在编译器/工具链中)。虽然,当代码有效时,错误更严重。
-
VC++ likes to give error C1001 when the compiled code contains errors (i.e. the programmer made a mistake, but VC++ just doesn't fully recognize the mistake in the code)。即使这是真的,它仍然是编译器错误。如果 VS 认为代码错误,它应该有理由这样认为。 -
@user2079303 我已经在我的项目中多次看到 C1001,因为我犯了一个小的语法错误,以至于我不再费心责骂我的编译器了。
-
@Bernard 你需要一个更好的编译器:)
-
@deviantfan 我希望 VS 2017 会更好:/ 对于 Windows,我没有太多选择,不是吗?
标签: c++ templates lambda c++14 auto