【发布时间】:2018-08-13 12:16:42
【问题描述】:
c++14 提供 variable templates 在 visual-studio-2017 中工作正常,但在 lambdas 中它们似乎分崩离析。例如:
template <typename T>
const auto PI = std::acos(static_cast<T>(-1));
int main() {
auto func = []() { cout << PI<float> << endl; };
func();
}
On gcc 6.3 这个输出:
3.14159
在 Visual Studio 2017 上,此输出:
0.0
【问题讨论】:
-
这不是一个明显的编译器错误吗?我的意思是,想象一下这是否是预期的行为颤抖
-
有趣。已通过 MSVC 19.00.23918(Visual Studio 2017 桌面版)确认。
-
是模板中的
auto失败,如果更改为T,它会按预期工作 -
看起来可能是优化器问题?
-Od适合你吗? -
@AndyG 是的,确实很棒的评论。将其放入 lambda 的捕获中也可以。
标签: c++14 visual-studio-2017 c++ lambda visual-studio-2017 c++14 variable-templates