лямбда как часть переменной stati c в функции шаблона - PullRequest
0 голосов
/ 12 февраля 2020

Допустим, мы определяем простую структуру S, содержащую 2 члена (1 int и 1 функтор) в заголовочном файле. И мы создаем такую ​​структуру как переменная stati c const в шаблонной функции foo и возвращаем ссылку на const этой структуры. Это законно в C ++ 17? Я пытаюсь вызвать foo<int> в 2 единицах перевода, и это работает с clang / g cc, но не удается с Visual Studio. В Visual Studio второй абонент возвращает неправильный m_n (0 вместо 5).

#include <iostream>

template<typename Func>
struct S {
    int m_n;
    Func m_func;
    S(int n, Func func): m_n(n), m_func(func) {}
};

template<typename T>
auto const& foo() noexcept {
    static auto const s=S(5, [](auto const&) noexcept { std::cout<<"lambda"<<std::endl; });
    return s;
}
...