1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 2*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++98 -Wno-c++11-extensions 3*67e74705SXin Li 4*67e74705SXin Li struct S { 5*67e74705SXin Li int *begin(); 6*67e74705SXin Li int *end(); 7*67e74705SXin Li }; 8*67e74705SXin Li 9*67e74705SXin Li struct T { 10*67e74705SXin Li }; 11*67e74705SXin Li 12*67e74705SXin Li struct Range {}; 13*67e74705SXin Li int begin(Range); // expected-note {{not viable}} 14*67e74705SXin Li int end(Range); 15*67e74705SXin Li 16*67e74705SXin Li namespace NS { 17*67e74705SXin Li struct ADL {}; 18*67e74705SXin Li struct iter { 19*67e74705SXin Li int operator*(); 20*67e74705SXin Li bool operator!=(iter); 21*67e74705SXin Li void operator++(); 22*67e74705SXin Li }; 23*67e74705SXin Li iter begin(ADL); // expected-note {{not viable}} 24*67e74705SXin Li iter end(ADL); 25*67e74705SXin Li 26*67e74705SXin Li struct NoADL {}; 27*67e74705SXin Li } 28*67e74705SXin Li NS::iter begin(NS::NoADL); // expected-note {{not viable}} 29*67e74705SXin Li NS::iter end(NS::NoADL); 30*67e74705SXin Li f()31*67e74705SXin Livoid f() { 32*67e74705SXin Li int a[] = {1, 2, 3}; 33*67e74705SXin Li for (auto b : S()) {} // ok 34*67e74705SXin Li for (auto b : T()) {} // expected-error {{invalid range expression of type 'T'}} 35*67e74705SXin Li for (auto b : a) {} // ok 36*67e74705SXin Li for (int b : NS::ADL()) {} // ok 37*67e74705SXin Li for (int b : NS::NoADL()) {} // expected-error {{invalid range expression of type 'NS::NoADL'}} 38*67e74705SXin Li } 39*67e74705SXin Li PR11601()40*67e74705SXin Livoid PR11601() { 41*67e74705SXin Li void (*vv[])() = {PR11601, PR11601, PR11601}; 42*67e74705SXin Li for (void (*i)() : vv) i(); 43*67e74705SXin Li } 44