将来是否会支持非平凡的指定初始值设定项 (Post C++17)?

Are non-trivial designated initializers going to be supported in the future (Post C++17)?

这是受此 post 的启发,其中 不支持非平凡的指定初始化程序

我已经阅读 this post 并且一些回答声称已经支持此功能。

但是,使用 C++17 和此代码:

struct s {
    int a[2];
    s (int b): a{[1]=b} {} // error
};

s foo(1);

我仍然得到错误:

sorry, unimplemented: non-trivial designated initializers not supported

s (int b): a{[1]=b} {}

我觉得这个功能真的很有用。

所以我的问题:

是否计划在未来的 C++ 版本 (post C++17) 中支持此功能?

编译器

GNU C++17 - 检查wandbox

为 C++20 (p0329r0) 添加指定初始化器的提案是有意限制的(请注意,作为官方语言功能,它具体是 C++20 功能 - 但 gcc 和 clang基本上已经支持此功能很长时间了):

C++是一门比C更复杂的语言,我们要操心的事情也更多。所以我们得到的规则是你不能混合指示符和值,指示符按声明顺序出现,是唯一的,既不是嵌套索引也不是数组索引。这已经是一个非常有用的语言功能了。

If not, what is the biggest hindrance why it's not going to be supported

可能是动机。我们真的需要那种语法吗?这是一个需要解决的问题吗?不利的一面是,可能存在解析歧义——您可以构建看起来很像 lambda 的数组索引初始值设定项。但如果你认为它足够值得,你可以写一份提案。