1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 3 // FIXME: embellish 4 5 namespace test0 { 6 namespace A { 7 class Foo { 8 }; 9 10 void foo(const Foo &foo); 11 } 12 13 class Test { 14 enum E { foo = 0 }; 15 test()16 void test() { 17 foo(A::Foo()); // expected-error {{not a function}} 18 } 19 }; 20 } 21 22 // If X contains [...] then Y is empty. 23 // - a declaration of a class member 24 namespace test_adl_suppression_by_class_member { 25 namespace N { 26 struct T {}; 27 void f(T); // expected-note {{declared here}} 28 } 29 struct S { 30 void f(); testtest_adl_suppression_by_class_member::S31 void test() { 32 N::T t; 33 f(t); // expected-error {{too many arguments}} 34 } 35 }; 36 } 37 38 // - a block-scope function declaration that is not a using-declaration 39 namespace test_adl_suppression_by_block_scope { 40 namespace N { 41 struct S {}; 42 void f(S); 43 } 44 namespace M { void f(int); } // expected-note 2{{candidate}} test1()45 void test1() { 46 N::S s; 47 using M::f; 48 f(s); // ok 49 } 50 test2()51 void test2() { 52 N::S s; 53 extern void f(char); // expected-note {{passing argument to parameter here}} 54 f(s); // expected-error {{no viable conversion from 'N::S' to 'char'}} 55 } 56 test3()57 void test3() { 58 N::S s; 59 extern void f(char); // expected-note {{candidate}} 60 using M::f; 61 f(s); // expected-error {{no matching function}} 62 } 63 test4()64 void test4() { 65 N::S s; 66 using M::f; 67 extern void f(char); // expected-note {{candidate}} 68 f(s); // expected-error {{no matching function}} 69 } 70 71 } 72 73 // - a declaration that is neither a function nor a function template 74 namespace test_adl_suppression_by_non_function { 75 namespace N { 76 struct S {}; 77 void f(S); 78 } test()79 void test() { 80 extern void (*f)(); 81 N::S s; 82 f(s); // expected-error {{too many arguments}} 83 } 84 } 85