brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 021c250 Raw
116 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s3// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s4 5// We have to avoid ADL for this test.6 7template <unsigned N> class test {};8 9class foo {};	// expected-note {{candidate constructor (the implicit copy constructor) not viable}}10#if __cplusplus >= 201103L // C++11 or later11// expected-note@-2 {{candidate constructor (the implicit move constructor) not viable}}12#endif13test<0> foo(foo); // expected-note {{candidate}}14 15namespace Test0 {16  class foo { int x; };17  test<1> foo(class foo);18 19  namespace A {20    test<2> foo(class ::foo); // expected-note {{candidate}} \21    // expected-note{{passing argument to parameter here}}22 23    void test0() {24      using ::foo;25 26      class foo a;27      test<0> _ = (foo)(a);28    }29 30    void test1() {31      using Test0::foo;32 33      class foo a;34      test<1> _ = (foo)(a);35    };36 37    void test2() {38      class ::foo a;39      40      // Argument-dependent lookup is ambiguous between B:: and ::.41      test<0> _0 = foo(a); // expected-error {{call to 'foo' is ambiguous}}42 43      // But basic unqualified lookup is not.44      test<2> _1 = (foo)(a);45 46      class Test0::foo b;47      test<2> _2 = (foo)(b); // expected-error {{no viable conversion from 'class Test0::foo' to 'class ::foo'}}48    }49  }50}51 52namespace Test1 {53  namespace A {54    class a {};55  }56 57  namespace B {58    typedef class {} b;59  }60 61  namespace C {62    int c(); // expected-note {{target of using declaration}}63  }64 65  namespace D {66    using typename A::a;67    using typename B::b;68    using typename C::c; // expected-error {{'typename' keyword used on a non-type}}69 70    a _1 = A::a();71    b _2 = B::b();72  }73}74 75namespace test2 {76  class A {77  protected:78    operator int();79    operator bool();80  };81 82  class B : private A {83  protected:84    using A::operator int; // expected-note {{declared protected here}}85  public:86    using A::operator bool;87  };88 89  int test() {90    bool b = B();91    return B(); // expected-error {{'operator int' is a protected member of 'test2::B'}}92  }93}94 95namespace test3 {96  class A {97  public:98    ~A();99  };100 101  class B {102    friend class C;103  private:104    operator A*();105  };106 107  class C : public B {108  public:109    using B::operator A*;110  };111 112  void test() {113    delete C();114  }115}116