f = [](...) { бла; бла; бла; Incomplete_S::foo(bar); }
}
То есть, в дефолтном инициализаторе переменной класса в теле лямбды используется статический член из неполного типа.
Единственный способ сделать, чтобы это работало, это сделать какую-нибудь возможно inline функцию, объявление которой написать в S.hpp в S, а определение в S.cpp, где Incomplete_S уже известен?
типа я сделал // S.hpp struct S { static inline std::function<...> init_f(); std::function<...> f = init_f(); } } // S.cpp inline std::function<...> S::init_f() { return [](...) { бла; бла; бла; Incomplete_S::foo(bar) }; } и оно работает
Обсуждают сегодня