为什么不能在 C++11 或更高版本的函数声明中定义结构?

Why can structs not be defined in a function declaration in C++11 or higher?

我想要实现的主要是 return 从 C++11 中的函数中获取一个未命名的结构。在 C++14 中,我可以通过定义内联函数并将 auto 作为 return 类型来实现,如下所示:

auto func()
{
    struct
    {
        int member;
    } ret;

    // set ret.member

    return ret;
}

但是,C++11 不支持推导普通(非 lambda)函数的 return 类型,这仅在定义内联完成时在 C++14 中有效。

我尝试了以下两种在函数声明中声明结构的变体:

auto func() -> struct { int member; };
struct { int member; } func();

C++11 根本不可能做到这一点吗?如果是这样,有人知道这是否是故意不允许的,或者只是没有人想到这种自动推导类型的新用途(因为这只适用于将函数 return 值分配给 auto 变量)?

最后,还有其他方法可以实现类似的效果吗?我知道 std::tuple,但我想命名这些值;在我的用例中,结构类型绝对仅用作此函数的 return 类型,那么为什么要命名它?

A class-specifierclass-head-name{ }.一旦遇到右大括号,就定义了 class。如果省略 class-head-name,则 class 未命名(§9)。 type-specifier 可以有一个 class-specifier,但是 trailing-type-specifier 不能(仅 简单类型说明符详细类型说明符类型名称说明符cv-qualifier 是允许的,§7.1.6)。出于这个原因,我认为不可能将 class 的定义放在 trailing-return-type 中。

来源:N4140

[dcl.fct]/p11:

Types shall not be defined in return or parameter types.

据我所知,这在 C++11 中并不新鲜。