// RUN: %clang_cc1 -fsyntax-only -verify %s // FIXME: embellish namespace test0 { namespace A { class Foo { }; void foo(const Foo &foo); } class Test { enum E { foo = 0 }; void test() { foo(A::Foo()); // expected-error {{not a function}} } }; } // If X contains [...] then Y is empty. // - a declaration of a class member namespace test_adl_suppression_by_class_member { namespace N { struct T {}; void f(T); // expected-note {{declared here}} } struct S { void f(); void test() { N::T t; f(t); // expected-error {{too many arguments}} } }; } // - a block-scope function declaration that is not a using-declaration namespace test_adl_suppression_by_block_scope { namespace N { struct S {}; void f(S); } namespace M { void f(int); } // expected-note 2{{candidate}} void test1() { N::S s; using M::f; f(s); // ok } void test2() { N::S s; extern void f(char); // expected-note {{passing argument to parameter here}} f(s); // expected-error {{no viable conversion from 'N::S' to 'char'}} } void test3() { N::S s; extern void f(char); // expected-note {{candidate}} using M::f; f(s); // expected-error {{no matching function}} } void test4() { N::S s; using M::f; extern void f(char); // expected-note {{candidate}} f(s); // expected-error {{no matching function}} } } // - a declaration that is neither a function nor a function template namespace test_adl_suppression_by_non_function { namespace N { struct S {}; void f(S); } void test() { extern void (*f)(); N::S s; f(s); // expected-error {{too many arguments}} } }