自动返回类型扣除的警告:为什么我们需要在返回时定义类型的decltype?

tma*_*ric 9 c++ c++11 c++14

这是关于如何对elementsSize()成员函数做什么的问题,关于自动返回类型推导:

#include <iostream>
#include <vector>

template<typename Element>
class ElementVector
{
    std::vector<Element> elementVec_;  

    // Other attributes.

    public: 

        ElementVector() = default; 

        ElementVector(const std::initializer_list<Element>& list)
            :
                elementVec_(list)
        {}

        auto elementsSize() // -> decltype(elementVec_size()) 
        {
            return elementVec_.size(); 
        }
};

using namespace std;

int main(int argc, const char *argv[])
{
    ElementVector<double> e = {1.2, 1.3, 1.4, 1.5};  

    cout << e.elementsSize() << endl;

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

上面的代码导致编译器警告(gcc 4.8.2):

main.cpp:20:27: warning: ‘elementsSize’ function uses ‘auto’ type specifier without trailing return type [enabled by default]
         auto elementsSize() // -> decltype(elementVec_size()) 
Run Code Online (Sandbox Code Playgroud)

我已经读过关于在不使用decltype的情况下为C++ 14实现自动返回类型推导的选项.

写下评论出来decltype似乎对我来说很奇怪.我究竟做错了什么?

注意:我知道如果"其他属性"中没有向量,我可以从std :: vector继承,这正是我实际问题中的情况.

Lig*_*ica 16

我究竟做错了什么?

没有.GCC 4.8实现了自动推导的返回类型,但是作为默认启用的C++ 1y功能.编译-std=c++1y将删除该警告.

[答案由此评论转换.]