44 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++112// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++98 -Wno-c++11-extensions3 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()) {} // ok34 for (auto b : T()) {} // expected-error {{invalid range expression of type 'T'}}35 for (auto b : a) {} // ok36 for (int b : NS::ADL()) {} // ok37 for (int b : NS::NoADL()) {} // expected-error {{invalid range expression of type 'NS::NoADL'}}38}39 40void PR11601() {41 void (*vv[])() = {PR11601, PR11601, PR11601};42 for (void (*i)() : vv) i();43}44