for-range-no-std.cpp revision 7640c0070361bd365e30fc2eb3b6a64361fa7377
1// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++0x 2// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++98 -Wno-c++0x-extensions 3 4struct S { 5 int *begin(); 6 int *end(); 7}; 8 9struct T { 10}; 11 12struct Range {}; 13int begin(Range); // expected-note {{not viable}} 14int end(Range); 15 16namespace NS { 17 struct ADL {}; 18 struct iter { 19 int operator*(); 20 bool operator!=(iter); 21 void operator++(); 22 }; 23 iter begin(ADL); // expected-note {{not viable}} 24 iter end(ADL); 25 26 struct NoADL {}; 27} 28NS::iter begin(NS::NoADL); // expected-note {{not viable}} 29NS::iter end(NS::NoADL); 30 31void f() { 32 int a[] = {1, 2, 3}; 33 for (auto b : S()) {} // ok 34 for (auto b : T()) {} // expected-error {{no matching function for call to 'begin'}} expected-note {{range has type}} 35 for (auto b : a) {} // ok 36 for (int b : NS::ADL()) {} // ok 37 for (int b : NS::NoADL()) {} // expected-error {{no matching function for call to 'begin'}} expected-note {{range has type}} 38} 39