p1.cpp revision 9625e44c0252485277a340746ed8ac950686156f
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace std { 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto begin(T &&t) -> decltype(t.begin()) { return t.begin(); } // expected-note 4{{ignored: substitution failure}} 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto end(T &&t) -> decltype(t.end()) { return t.end(); } // expected-note {{candidate template ignored: substitution failure [with T = }} 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto begin(T &&t) -> decltype(t.alt_begin()) { return t.alt_begin(); } // expected-note {{selected 'begin' template [with T = }} \ 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected-note 4{{candidate template ignored: substitution failure [with T = }} 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto end(T &&t) -> decltype(t.alt_end()) { return t.alt_end(); } // expected-note {{candidate template ignored: substitution failure [with T = }} 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) namespace inner { 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // These should never be considered. 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int begin(int); 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int end(int); 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using namespace inner; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct A { // expected-note {{candidate constructor}} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A(); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *begin(); // expected-note 3{{selected 'begin' function with iterator type 'int *'}} expected-note {{'begin' declared here}} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *end(); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct B { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) B(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *alt_begin(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *alt_end(); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void f(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void f(int); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void g() { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int a : A()) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A __begin; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (char *a : A()) { // expected-error {{cannot initialize a variable of type 'char *' with an lvalue of type 'int'}} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (char *a : B()) { // expected-error {{cannot initialize a variable of type 'char *' with an lvalue of type 'int'}} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FIXME: Terrible diagnostic here. auto deduction should fail, but does not! 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (double a : f) { // expected-error {{cannot use type '<overloaded function type>' as a range}} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto a : A()) { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto a : B()) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto *a : A()) { // expected-error {{variable 'a' with type 'auto *' has incompatible initializer of type 'int'}} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // : is not a typo for :: here. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (A NS:A()) { // expected-error {{no viable conversion from 'int' to 'A'}} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto not_in_scope : not_in_scope) { // expected-error {{use of undeclared identifier 'not_in_scope'}} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto a : A()) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto b : A()) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __range.begin(); // expected-error {{use of undeclared identifier '__range'}} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++__begin; // expected-error {{use of undeclared identifier '__begin'}} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) --__end; // expected-error {{use of undeclared identifier '__end'}} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (char c : "test") 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto a : f()) // expected-error {{cannot use type 'void' as a range}} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extern int incomplete[]; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto a : incomplete) // expected-error {{cannot use incomplete type 'int []' as a range}} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extern struct Incomplete also_incomplete[2]; // expected-note {{forward declaration}} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto &a : also_incomplete) // expected-error {{cannot use incomplete type 'struct Incomplete [2]' as a range}} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct VoidBegin { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void begin(); // expected-note {{selected 'begin' function with iterator type 'void'}} 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void end(); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto a : VoidBegin()) // expected-error {{cannot use type 'void' as an iterator}} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct null_t { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) operator int*(); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct Differ { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *begin(); // expected-note {{selected 'begin' function with iterator type 'int *'}} 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) null_t end(); // expected-note {{selected 'end' function with iterator type 'null_t'}} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto a : Differ()) // expected-error {{'begin' and 'end' must return the same type (got 'int *' and 'null_t')}} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (void f() : "error") // expected-error {{for range declaration must declare a variable}} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (extern int a : A()) {} // expected-error {{loop variable 'a' may not be declared 'extern'}} 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (static int a : A()) {} // expected-error {{loop variable 'a' may not be declared 'static'}} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (register int a : A()) {} // expected-error {{loop variable 'a' may not be declared 'register'}} 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FIXME: when clang supports constexpr, this should be rejected. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (constexpr int a : A()) {} // desired-error {{loop variable 'a' may not be declared 'constexpr'}} 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct NoBeginADL { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) null_t alt_end(); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct NoEndADL { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) null_t alt_begin(); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto u : NoBeginADL()) { // expected-error {{no matching function for call to 'begin'}} expected-note {{range has type 'NoBeginADL'}} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto u : NoEndADL()) { // expected-error {{no matching function for call to 'end'}} expected-note {{range has type 'NoEndADL'}} 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct NoBegin { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) null_t end(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct NoEnd { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) null_t begin(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto u : NoBegin()) { // expected-error {{range type 'NoBegin' has 'end' member but no 'begin' member}} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto u : NoEnd()) { // expected-error {{range type 'NoEnd' has 'begin' member but no 'end' member}} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct NoIncr { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *begin(); // expected-note {{selected 'begin' function with iterator type 'void *'}} 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *end(); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto u : NoIncr()) { // expected-error {{arithmetic on pointer to void type}} 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct NoNotEq { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NoNotEq begin(); // expected-note {{selected 'begin' function with iterator type 'NoNotEq'}} 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NoNotEq end(); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void operator++(); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto u : NoNotEq()) { // expected-error {{invalid operands to binary expression}} 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct NoCopy { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NoCopy(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NoCopy(const NoCopy &) = delete; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *begin(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *end(); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int n : NoCopy()) { // ok 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int n : 42) { // expected-error {{no matching function for call to 'begin'}} \ 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected-note {{range has type 'int'}} 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto a : *also_incomplete) { // expected-error {{cannot use incomplete type 'struct Incomplete' as a range}} 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T, typename U> 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void h(T t) { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (U u : t) { // expected-error {{no viable conversion from 'A' to 'int'}} 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto u : t) { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template void h<A, int>(A); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template void h<A(&)[4], A &>(A(&)[4]); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template void h<A(&)[13], A>(A(&)[13]); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template void h<A(&)[13], int>(A(&)[13]); // expected-note {{requested here}} 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void i(T t) { 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (auto u : t) { // expected-error {{no matching function for call to 'begin'}} \ 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected-error {{member function 'begin' not viable}} \ 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected-note {{range has type}} 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template void i<A[13]>(A*); // expected-note {{requested here}} 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template void i<const A>(const A); // expected-note {{requested here}} 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace NS { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class ADL {}; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *begin(ADL); // expected-note {{no known conversion from 'NS::NoADL' to 'NS::ADL'}} 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *end(ADL); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class NoADL {}; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int *begin(NS::NoADL); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int *end(NS::NoADL); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct VoidBeginADL {}; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void begin(VoidBeginADL); // expected-note {{selected 'begin' function with iterator type 'void'}} 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void end(VoidBeginADL); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void j() { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto u : NS::ADL()) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto u : NS::NoADL()) { // expected-error {{no matching function for call to 'begin'}} expected-note {{range has type}} 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (auto a : VoidBeginADL()) { // expected-error {{cannot use type 'void' as an iterator}} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void example() { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int array[5] = { 1, 2, 3, 4, 5 }; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int &x : array) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) x *= 2; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)