Сегодня я попытался сделать что-то подобное. Я был удивлен, что он не скомпилировался.
struct Test {
// v----- Remove me to compile
// /*
static constexpr auto get_test1 = [](Test const& self) {
return self.test; // error, Test is incomplete
};
// */
// Handwritten version of the lambda
struct {
constexpr auto operator() (Test const& self) const {
return self.test; // ok
}
}
static constexpr get_test2{};
int test;
};
В нем говорится, что тип Test
является неполным в объеме. Однако рукописная версия лямбды действительно работает. Какова техническая причина этого? Является ли это надзором в стандарте или существует конкретная формулировка, которая делает Test
неполным в лямбда?