Ошибка шаблонных переменных с лямбдами в Visual Studio?
C++14 предоставляет переменные шаблоны, которые прекрасно работают в /questions/tagged/visual-studio-2017, но в лямбдах они, кажется, распадаются. Например:
template <typename T>
const auto PI = std::acos(static_cast<T>(-1));
int main() {
auto func = []() { cout << PI<float> << endl; };
func();
}
На gcc 6.3 это выводит:
3,14159
На Visual Studio 2017 это выводит:
0.0
1 ответ
Решение
Странная ошибка, но, похоже, есть надежный обходной путь, который подходит как для данного случая, так и для соответствующего случая. В обоих случаях принудительная активация шаблона, кажется, делает работу в 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