Я помню, как кто-то однажды сказал мне,
«нет необходимости в
auto
внутри циклов for на основе диапазона. Это не было бы двусмысленным в языке, если бы мы удалили его».
Верно ли это утверждение?
Является ли следующий код допустимым синтаксисом C++?
for (elem : range){...}
Я предполагал, что это уже допустимый синтаксис, но когда я начал компилировать сclang++ --std=c++1z
, мне была показана следующая ошибка:
range-based for loop requires type for loop variable
for (elem: range){
Компилятор по-прежнему распознает это как цикл for на основе диапазона, так почему же он не может также получить этот тип?
elem
уже именем в области видимости, что, если кто-то добавит его позже и т. д. - person Kerrek SB   schedule 22.09.2015for(auto&& elem : range)
. IIRC clang реализовал это как часть-std=c++1z
, но когда предложение было отклонено, они, вероятно, превратили это в ошибку. - person Praetorian   schedule 22.09.2015auto
, так как это недостаточно явно, точно так же, как они отвергли[](x, y) {...}
(хотя[x=2](){}
было принято). - person chris   schedule 22.09.2015