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

时间:2014-01-21 12:23:54

标签: 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;
}

上面的代码导致编译器警告(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()) 

我已经阅读过关于C++14无法使用decltype的自动返回类型推导选项。

写出注释掉的decltype对我来说似乎很奇怪。我究竟做错了什么?

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

1 个答案:

答案 0 :(得分:16)

  

我做错了什么?

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

[答案由this comment转换。]