https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69215
Bug ID: 69215 Summary: Improve diagnostic for 'for(i : v)' Product: gcc Version: 6.0 Status: UNCONFIRMED Keywords: diagnostic Severity: enhancement Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: rs2740 at gmail dot com Target Milestone: --- Something like #include <vector> int main(){ std::vector<int> v; for(i : v) {} } produces a storm of not-very-enlightening errors on trunk: prog.cc: In function 'int main()': prog.cc:5:11: error: found ':' in nested-name-specifier, expected '::' for(i : v) {} ^ prog.cc:5:9: error: 'i' has not been declared for(i : v) {} ^ prog.cc:6:1: error: expected primary-expression before '}' token } ^ prog.cc:6:1: error: expected ';' before '}' token prog.cc:6:1: error: expected primary-expression before '}' token prog.cc:6:1: error: expected ')' before '}' token prog.cc:6:1: error: expected primary-expression before '}' token in contrast to clang's: prog.cc:5:9: error: range-based for loop requires type for loop variable for(i : v) {} ^ Perhaps the code implementing N3994, removed by r229632, can be repurposed instead to produce a better error message?