| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- // RUN: not %clang_cc1 -fsyntax-only -fdiagnostics-parseable-fixits -std=c++11 %s 2>&1 | FileCheck %s
- template<typename T, typename U>
- struct pair {};
- template<typename T, typename U>
- struct map {
- typedef pair<T,U> *iterator;
- iterator begin();
- iterator end();
- };
- template<typename T, typename U>
- pair<T,U> &tie(T &, U &);
- int foo(map<char*,int> &m) {
- char *p;
- int n;
- for (pair<char*,int> x : m) {
- (void)x;
- }
- for (tie(p, n) : m) { // expected-error {{for range declaration must declare a variable}}
- (void)p;
- (void)n;
- }
- return n;
- }
- namespace PR19176 {
- struct Vector {
- struct iterator {
- int &operator*();
- iterator &operator++();
- iterator &operator++(int);
- bool operator==(const iterator &) const;
- };
- iterator begin();
- iterator end();
- };
- void f() {
- Vector v;
- int a[] = {1, 2, 3, 4};
- for (auto foo = a) // expected-error {{range-based 'for' statement uses ':', not '='}}
- // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:19-[[@LINE-1]]:20}:":"
- (void)foo;
- for (auto i
- =
- v) // expected-error@-1 {{range-based 'for' statement uses ':', not '='}}
- // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:7-[[@LINE-2]]:8}:":"
- (void)i;
- #define FORRANGE(v, a) for (DECLVARWITHINIT(v) a) // expected-note {{expanded from macro}}
- #define DECLAUTOVAR(v) auto v
- #define DECLVARWITHINIT(v) DECLAUTOVAR(v) = // expected-note {{expanded from macro}}
- FORRANGE(i, a) { // expected-error {{range-based 'for' statement uses ':', not '='}}
- }
- }
- }
|