警告:函数使用不带尾随返回类型的'auto'类型说明符



以下代码在下面发出警告。有人可以解释原因吗(注意代码没有用,因为我用int替换了我的类型以做一个完整的示例(。

警告:' MaxEventSize()'函数使用' auto'类型指定符而无需拖延返回类型[默认启用]

这个想法是要获得特定结构的最大大小(类型为int在哪里(。

template<typename T>
constexpr T cexMax(T a, T b)
{
    return (a < b) ? b : a;
}
constexpr auto MaxEventSize()
{
    return cexMax(sizeof(int),
           cexMax(sizeof(int),
                    sizeof(int)));
};

auto返回类型"无落后返回类型"是C 14功能,所以我想您正在编译C 11。

C 14可以使用代码,但是对于C 11,如果您想将auto用作返回类型,则需要以这种方式描述有效的返回类型(警告:pseudocode(

auto funcName (args...) -> returnType

您知道sizeof()返回std::size_t,因此可以纠正您的示例为

constexpr auto MaxEventSize() -> std::size_t
{
    return cexMax(sizeof(int),
           cexMax(sizeof(int),
                    sizeof(int)));
};

或(在这种情况下,愚蠢,但在更复杂的示例中显示使用(

constexpr auto MaxEventSize() -> decltype( cexMax(sizeof(int),
                                                  cexMax(sizeof(int),
                                                         sizeof(int))) )
{
    return cexMax(sizeof(int),
           cexMax(sizeof(int),
                    sizeof(int)));
};

为什么不使用模板t?
更换行

constexpr auto MaxEventSize()  

template<typename T>constexpr T MaxEventSize()  

应该与C 11一起工作。

最新更新