Допустим, мы определяем простую структуру 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;
}