【发布时间】:2018-03-15 00:22:34
【问题描述】:
我今天尝试做类似的事情。我很惊讶它没有编译。
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 类型在范围内不完整。然而 lambda 的手写版本确实有效。这样做的技术原因是什么?是标准中的疏忽,还是有特定的措辞使 Test 在 lambda 中不完整?
【问题讨论】:
-
自从CWG 1836之后,似乎两者都可以。
-
@xskxzr 不确定是否相关,我什至没有使用尾随返回类型
-
注意第二个变化,点之前的子表达式不再需要是完整的类类型。
标签: c++ lambda language-lawyer c++17