Я наткнулся на кусок кода, которому я не следую.Рассмотрим следующие 2 метода:
template <typename T>
auto FindElementV1(std::vector<T> elementList, const T& element) {
return std::find(elementList.begin(), elementList.end(), element);
}
template <typename T>
auto FindElementV2(std::vector<T> elementList, const T& element) -> typename decltype(elementList)::iterator {
return std::find(elementList.begin(), elementList.end(), element);
}
Я могу понять, FindElementV2
работает, так как тип возвращаемого значения для этого метода указывается с помощью decltype
.Но почему FindElementV1
работает без указания типа возвращаемого значения?Является ли V1
стандартным совместимым фрагментом кода?
Ниже приведен полный рабочий пример.Соблюдается GCC 6.3
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
template <typename T>
auto FindElementV1(std::vector<T> elementList, const T& element) {
return std::find(elementList.begin(), elementList.end(), element);
}
int main() {
std::vector<int> vec = {1,4,2,4,3,5,3,5,3,6};
auto it = FindElementV1(vec, 5); //< Why does this work without a return type in the method?
cout<<*it<<endl;
}