为什么不能在类初始化成员中声明自动?

Nik*_*iou 7 c++ lambda c++11

在C++中,您可以这样做:

struct A
{
    int a, b;
    double k = 3; // OK
};
Run Code Online (Sandbox Code Playgroud)

但不是这个

struct A
{
    int a, b;
    auto f = [this]() {return this->a + this->b; }; // Error
};
Run Code Online (Sandbox Code Playgroud)

编译器通知我们错误

非静态数据成员声明'auto'

让我们知道这会奏效

struct A
{
    int a, b;
    function<int(void)> f = [this]() { return this->a + this->b; }; // OK
};
Run Code Online (Sandbox Code Playgroud)

我想问一些有关这方面的见解.特别是为什么(简单的答案是标准明确不允许它根据某些经文)

换句话说:类成员初始化中是否包含足够的成员类型?

我知道在类成员初始化中是语法糖,但这是编译器可以收集附加信息的情况,但由于设计选择而无法这样做?(很像autoC++ 11之前的缺乏)或更深层次选择设置的限制(如静态输入的语言等)?