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

jPl*_*tte 7 c++ c++11 c++14

我想要实现的主要是从C++ 11中的函数返回一个未命名的结构.在C++ 14中,我可以通过定义函数内联并具有auto返回类型来完成此操作,如下所示:

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

    // set ret.member

    return ret;
}
Run Code Online (Sandbox Code Playgroud)

但是,C++ 11不支持推导普通(非lambda)函数的返回类型,这仅在内联完成定义时才适用于C++ 14.

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

auto func() -> struct { int member; };
struct { int member; } func();
Run Code Online (Sandbox Code Playgroud)

这对C++ 11来说根本不可能吗?如果是这样,是否有人知道这是否是故意禁止的,或者只是没有人想到这种自动推断类型的新用法(因为这只适用于将函数返回值赋给auto变量)?

最后,有没有其他方法可以实现类似的东西?我知道std::tuple,但我想说出价值观; 在我的用例中,struct类型肯定只用作这一函数的返回类型,为什么要命名呢?

T.C*_*.C. 4

[dcl.fct]/p11:

不得在返回类型或参数类型中定义类型。

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