brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · da548b7 Raw
125 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++983// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++114 5#if __cplusplus >= 201103L6// expected-note@+3 2 {{candidate constructor}}7// expected-note@+2 {{passing argument to parameter here}}8#endif9struct A {10};11 12struct ConvertibleToA {13  operator A();14};15 16struct ConvertibleToConstA {17#if __cplusplus >= 201103L18// expected-note@+2 {{candidate function}}19#endif20  operator const A();21};22 23struct B {24  B& operator=(B&);  // expected-note 4 {{candidate function}}25};26 27struct ConvertibleToB {28  operator B();29};30 31struct ConvertibleToBref {32  operator B&();33};34 35struct ConvertibleToConstB {36  operator const B();37};38 39struct ConvertibleToConstBref {40  operator const B&();41};42 43struct C {44  int operator=(int); // expected-note{{candidate function}}45  long operator=(long); // expected-note{{candidate function}}46  int operator+=(int); // expected-note{{candidate function}}47  int operator+=(long); // expected-note{{candidate function}}48};49 50struct D {51  D& operator+=(const D &);52};53 54struct ConvertibleToInt {55  operator int();56};57 58void test() {59  A a, na;60  const A constA = A();61  ConvertibleToA convertibleToA;62  ConvertibleToConstA convertibleToConstA;63 64  B b, nb;65  const B constB = B();66  ConvertibleToB convertibleToB;67  ConvertibleToBref convertibleToBref;68  ConvertibleToConstB convertibleToConstB;69  ConvertibleToConstBref convertibleToConstBref;70 71  C c, nc;72  const C constC = C();73 74  D d, nd;75  const D constD = D();76 77  ConvertibleToInt convertibleToInt;78 79  na = a;80  na = constA;81  na = convertibleToA;82#if __cplusplus >= 201103L83// expected-error@+2 {{no viable conversion}}84#endif85  na = convertibleToConstA;86  na += a; // expected-error{{no viable overloaded '+='}}87 88  nb = b;89  nb = constB;  // expected-error{{no viable overloaded '='}}90  nb = convertibleToB; // expected-error{{no viable overloaded '='}}91  nb = convertibleToBref;92  nb = convertibleToConstB; // expected-error{{no viable overloaded '='}}93  nb = convertibleToConstBref; // expected-error{{no viable overloaded '='}}94 95  nc = c;96  nc = constC;97  nc = 1;98  nc = 1L;99  nc = 1.0; // expected-error{{use of overloaded operator '=' is ambiguous}}100  nc += 1;101  nc += 1L;102  nc += 1.0; // expected-error{{use of overloaded operator '+=' is ambiguous}}103 104  nd = d;105  nd += d;106  nd += constD;107 108  int i;109  i = convertibleToInt;110  i = a; // expected-error{{assigning to 'int' from incompatible type 'A'}}111}112 113// Don't crash114namespace test1 {115  template<typename T> class A : public unknown::X { // expected-error {{undeclared identifier 'unknown'}} expected-error {{expected class name}}116    A(UndeclaredType n) : X(n) {} // expected-error {{unknown type name 'UndeclaredType'}}117    // expected-error@-1 {{member initializer 'X' does not name a non-static data member or base class}}118  };119  template<typename T> class B : public A<T>     {120    virtual void foo() {}121  };122  extern template class A<char>;123  extern template class B<char>;124}125