在Visual Studio中使用Lambdas进行模板化变量错误?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Visual Studio中使用Lambdas进行模板化变量错误?相关的知识,希望对你有一定的参考价值。

提供variable templates哪个在工作得很好,但在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

答案

奇怪的错误,但似乎有一个可靠的解决方法,这适用于这两种情况,本案例和related case。在这两种情况下,强制激活模板似乎在VS2017中完成了这项工作:

template <typename T>
const auto PI = std::acos(static_cast<T>(-1));

int main() 
{
  PI<float>; // <------ this
  auto func = []() { std::cout << PI<float> << std::endl; };

  func();
}

例如GCC 6.3:https://ideone.com/9UdwBT

以上是关于在Visual Studio中使用Lambdas进行模板化变量错误?的主要内容,如果未能解决你的问题,请参考以下文章

Azure 函数从门户或 Visual Studio-Blob 触发器执行

在 Visual Studio .net 中连接到 Advantage Database .add

android studio官网怎么进

第一次使用 OpenGL:我应该如何配置 Visual Studio Express 2015 来构建和运行 OpenGL 项目?

qt 4.6.2 与visual studio 2005 集成(编译方法,以及中间遇到的问题)

Visual Studio Code 1.71 发布