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)