2016-11-10 4 views
0

Почему следующие компиляции не выполняются? Может ли компилятор не выводить возвращаемый тип из ввода?вывод возвращаемого типа из аргумента автоматического ввода

Не полностью следуйте отображаемой ошибке преобразования типа.

auto func(auto &x) 
{ 
return x[0]; 
} 

int main() 
{ 
    vector<int> v = { 1, 2, 3}; 
    (void)func(v); 
} 

$ g++ -std=c++1z auto.cc 
auto.cc: In instantiation of ‘auto func(auto:1&) [with auto:1 = std::vector<int>]’: 
auto.cc:15:16: required from here 
auto.cc:8:14: error: could not convert ‘(& x)->std::vector<_Tp, _Alloc>::operator[]<int, std::allocator<int> >(0ul)’ from ‘__gnu_cxx::__alloc_traits<std::allocator<int> >::value_type {aka int}’ to ‘std::vector<int>’ 
    return x[0]; 

ответ

3

auto в качестве аргумента функции типа не является стандартным C++. Тем не менее, g++ 7 (svn) принимает его ... and your code compiles.

+0

Вы уверены, что это не предлагается в будущем [C + 1z] (https://en.wikipedia.org/wiki/C%2B%2B17) a.k.a. C ​​++ 17 черновик проекта? Я не думаю, что GCC добавляет много возможностей помимо этого предложения. –

+0

Обратите внимание, что использование 'auto' для объявления типа параметра лямбда поддерживается в C++ 14. – EricWF

+0

@BasileStarynkevitch: Я думаю, что это часть концепций TS, которая еще не стандартная C++ 17. –

Смежные вопросы