brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.5 KiB · 047df17 Raw
754 lines · cpp
1// RUN: %clang_cc1 -std=c++98 %s -verify=expected -fexceptions -fcxx-exceptions -pedantic-errors2// RUN: %clang_cc1 -std=c++11 %s -verify=expected,cxx11-17,since-cxx11, -fexceptions -fcxx-exceptions -pedantic-errors3// RUN: %clang_cc1 -std=c++14 %s -verify=expected,cxx14-17,cxx11-17,since-cxx11,since-cxx14 -fexceptions -fcxx-exceptions -pedantic-errors4// RUN: %clang_cc1 -std=c++17 %s -verify=expected,cxx14-17,cxx11-17,since-cxx11,since-cxx14 -fexceptions -fcxx-exceptions -pedantic-errors5// RUN: %clang_cc1 -std=c++20 %s -verify=expected,since-cxx11,since-cxx14,since-cxx20 -fexceptions -fcxx-exceptions -pedantic-errors6// RUN: %clang_cc1 -std=c++23 %s -verify=expected,since-cxx11,since-cxx14,since-cxx20 -fexceptions -fcxx-exceptions -pedantic-errors7// RUN: %clang_cc1 -std=c++2c %s -verify=expected,since-cxx11,since-cxx14,since-cxx20 -fexceptions -fcxx-exceptions -pedantic-errors8 9// RUN: %clang_cc1 -std=c++98 %s -verify=expected -fexceptions -fcxx-exceptions -pedantic-errors -fexperimental-new-constant-interpreter10// RUN: %clang_cc1 -std=c++11 %s -verify=expected,cxx11-17,since-cxx11, -fexceptions -fcxx-exceptions -pedantic-errors -fexperimental-new-constant-interpreter11// RUN: %clang_cc1 -std=c++14 %s -verify=expected,cxx14-17,cxx11-17,since-cxx11,since-cxx14 -fexceptions -fcxx-exceptions -pedantic-errors -fexperimental-new-constant-interpreter12// RUN: %clang_cc1 -std=c++17 %s -verify=expected,cxx14-17,cxx11-17,since-cxx11,since-cxx14 -fexceptions -fcxx-exceptions -pedantic-errors -fexperimental-new-constant-interpreter13// RUN: %clang_cc1 -std=c++20 %s -verify=expected,since-cxx11,since-cxx14,since-cxx20 -fexceptions -fcxx-exceptions -pedantic-errors -fexperimental-new-constant-interpreter14// RUN: %clang_cc1 -std=c++23 %s -verify=expected,since-cxx11,since-cxx14,since-cxx20 -fexceptions -fcxx-exceptions -pedantic-errors -fexperimental-new-constant-interpreter15// RUN: %clang_cc1 -std=c++2c %s -verify=expected,since-cxx11,since-cxx14,since-cxx20 -fexceptions -fcxx-exceptions -pedantic-errors -fexperimental-new-constant-interpreter16 17namespace cwg1413 { // cwg1413: 1218  template<int> struct Check {19    typedef int type;20  };21  template<typename T> struct A : T {22    static const int a = 1;23    static const int b;24    static void c();25    void d();26 27    void f() {28      Check<true ? 0 : A::unknown_spec>::type *var1;29      // expected-error@-1 {{use of undeclared identifier 'var1'}}30 31      // ok, variable declaration32      Check<true ? 0 : a>::type *var2; // #cwg1413-var233      Check<true ? 0 : b>::type *var3;34      // expected-error@-1 {{use of undeclared identifier 'var3'}}35      //   expected-note@#cwg1413-var2 {{'var2' declared here}}36      Check<true ? 0 : ((void)c, 0)>::type *var4;37      // expected-error@-1 {{use of undeclared identifier 'var4'}}38      //   expected-note@#cwg1413-var2 {{'var2' declared here}}39 40      // value-dependent because of the implied type-dependent 'this->', not because of 'd'41      Check<true ? 0 : (d(), 0)>::type *var5;42      // expected-error@-1 {{use of undeclared identifier 'var5'}}43      //   expected-note@#cwg1413-var2 {{'var2' declared here}}44 45      // value-dependent because of the value-dependent '&' operator, not because of 'A::d'46      Check<true ? 0 : (&A::d(), 0)>::type *var5;47      // expected-error@-1 {{use of undeclared identifier 'var5'}}48      //   expected-note@#cwg1413-var2 {{'var2' declared here}}49    }50  };51} // namespace cwg141352 53namespace cwg1423 { // cwg1423: 1154#if __cplusplus >= 201103L55  bool b1 = nullptr;56  // since-cxx11-error@-1 {{cannot initialize a variable of type 'bool' with an rvalue of type 'std::nullptr_t'}}57  bool b2(nullptr);58  // since-cxx11-warning@-1 {{implicit conversion of nullptr constant to 'bool'}}59  bool b3 = {nullptr};60  // since-cxx11-error@-1 {{cannot initialize a variable of type 'bool' with an rvalue of type 'std::nullptr_t'}}61  bool b4{nullptr};62  // since-cxx11-warning@-1 {{implicit conversion of nullptr constant to 'bool'}}63#endif64} // namespace 142365 66// cwg1425: na abi67 68namespace cwg1432 { // cwg1432: 16 open 2022-11-1169#if __cplusplus >= 201103L70  namespace class_template_partial_spec {71    template<typename T> T declval();72 73    template <class... T>74    struct common_type;75 76    template <class T, class U>77    struct common_type<T, U> {78     typedef decltype(true ? declval<T>() : declval<U>()) type;79    };80 81    template <class T, class U, class... V>82    struct common_type<T, U, V...> {83     typedef typename common_type<typename common_type<T, U>::type, V...>::type type;84    };85 86    template struct common_type<int, double>;87  } // namespace class_template_partial_spec88  namespace function_template {89    template <int I, class... Ts> struct A {};90 91    template <int I, class... Ts> void f(A<I, Ts...>) = delete;92    template <int I> void f(A<I>);93 94    void test() {95      f(A<0>());96    }97  } // namespace function_template98#endif99} // namespace cwg1432100 101namespace cwg1443 { // cwg1443: 2.7102struct A {103  int i;104  A() { void foo(int=i); }105  // expected-error@-1 {{default argument references 'this'}}106};107} // namespace cwg1443108 109namespace cwg1458 { // cwg1458: 3.1110#if __cplusplus >= 201103L111struct A;112 113void f() {114  constexpr A* a = nullptr;115  constexpr int p = &*a;116  // since-cxx11-error@-1 {{cannot initialize a variable of type 'const int' with an rvalue of type 'A *'}}117  constexpr A *p2 = &*a;118  // since-cxx11-error@-1 {{constexpr variable 'p2' must be initialized by a constant expression}}119  // since-cxx11-note@-2 {{dereferencing a null pointer}}120}121 122struct A {123  int operator&();124};125#endif126} // namespace cwg1458127 128namespace cwg1460 { // cwg1460: 3.5129#if __cplusplus >= 201103L130  namespace DRExample {131    union A {132      union {};133      // since-cxx11-error@-1 {{declaration does not declare anything}}134      union {};135      // since-cxx11-error@-1 {{declaration does not declare anything}}136      constexpr A() {}137    };138    constexpr A a = A();139 140    union B {141      union {};142      // since-cxx11-error@-1 {{declaration does not declare anything}}143      union {};144      // since-cxx11-error@-1 {{declaration does not declare anything}}145      constexpr B() = default;146    };147    constexpr B b = B();148 149    union C {150      union {};151      // since-cxx11-error@-1 {{declaration does not declare anything}}152      union {};153      // since-cxx11-error@-1 {{declaration does not declare anything}}154    };155    constexpr C c = C();156#if __cplusplus >= 201403L157    constexpr void f() { C c; }158    static_assert((f(), true), "");159#endif160  }161 162  union A {};163  union B { int n; }; // #cwg1460-B164  union C { int n = 0; };165  struct D { union {}; };166  // since-cxx11-error@-1 {{declaration does not declare anything}}167  struct E { union { int n; }; }; // #cwg1460-E168  struct F { union { int n = 0; }; };169 170  struct X {171    friend constexpr A::A() noexcept;172    friend constexpr B::B() noexcept;173    // cxx11-17-error@-1 {{constexpr declaration of 'B' follows non-constexpr declaration}}174    //   cxx11-17-note@#cwg1460-B {{previous declaration is here}}175    friend constexpr C::C() noexcept;176    friend constexpr D::D() noexcept;177    friend constexpr E::E() noexcept;178    // cxx11-17-error@-1 {{constexpr declaration of 'E' follows non-constexpr declaration}}179    //   cxx11-17-note@#cwg1460-E {{previous declaration is here}}180    friend constexpr F::F() noexcept;181  };182 183  // These are OK, because value-initialization doesn't actually invoke the184  // constructor.185  constexpr A a = A();186  constexpr B b = B();187  constexpr C c = C();188  constexpr D d = D();189  constexpr E e = E();190  constexpr F f = F();191 192  namespace Defaulted {193    union A { constexpr A() = default; };194    union B { int n; constexpr B() = default; };195    // cxx11-17-error@-1 {{defaulted definition of default constructor cannot be marked constexpr}}196    union C { int n = 0; constexpr C() = default; };197    struct D { union {}; constexpr D() = default; };198    // since-cxx11-error@-1 {{declaration does not declare anything}}199    struct E { union { int n; }; constexpr E() = default; };200    // cxx11-17-error@-1 {{defaulted definition of default constructor cannot be marked constexpr}}201    struct F { union { int n = 0; }; constexpr F() = default; };202 203    struct G { union { int n = 0; }; union { int m; }; constexpr G() = default; };204    // cxx11-17-error@-1 {{defaulted definition of default constructor cannot be marked constexpr}}205    struct H {206      union {207        int n = 0;208      };209      union { // #cwg1460-H-union210        int m;211      };212      constexpr H() {}213      // cxx11-17-error@-1 {{constexpr constructor that does not initialize all members is a C++20 extension}}214      //   cxx11-17-note@#cwg1460-H-union {{member not initialized by constructor}}215      constexpr H(bool) : m(1) {}216      constexpr H(char) : n(1) {}217      // cxx11-17-error@-1 {{constexpr constructor that does not initialize all members is a C++20 extension}}218      //   cxx11-17-note@#cwg1460-H-union {{member not initialized by constructor}}219      constexpr H(double) : m(1), n(1) {}220    };221  }222 223#if __cplusplus >= 201403L224  template<typename T> constexpr bool check() {225    T t; // #cwg1460-t226    return true;227  }228  static_assert(check<A>(), "");229  static_assert(check<B>(), ""); // #cwg1460-check-B230  // cxx14-17-error@-1 {{static assertion expression is not an integral constant expression}}231  //   cxx14-17-note@#cwg1460-t {{non-constexpr constructor 'B' cannot be used in a constant expression}}232  //   cxx14-17-note@#cwg1460-check-B {{in call to 'check<cwg1460::B>()'}}233  //   cxx14-17-note@#cwg1460-B {{declared here}}234  static_assert(check<C>(), "");235  static_assert(check<D>(), "");236  static_assert(check<E>(), ""); // #cwg1460-check-E237  // cxx14-17-error@-1 {{static assertion expression is not an integral constant expression}}238  //   cxx14-17-note@#cwg1460-t {{non-constexpr constructor 'E' cannot be used in a constant expression}}239  //   cxx14-17-note@#cwg1460-check-E {{in call to 'check<cwg1460::E>()'}}240  //   cxx14-17-note@#cwg1460-E {{declared here}}241  static_assert(check<F>(), "");242#endif243 244  union G {245    int a = 0; // #cwg1460-G-a246    int b = 0;247    // since-cxx11-error@-1 {{initializing multiple members of union}}248    //   since-cxx11-note@#cwg1460-G-a {{previous initialization is here}}249  };250  union H {251    union {252      int a = 0; // #cwg1460-H-a253    };254    union {255      int b = 0;256      // since-cxx11-error@-1 {{initializing multiple members of union}}257      //   since-cxx11-note@#cwg1460-H-a {{previous initialization is here}}258    };259  };260  struct I {261    union {262      int a = 0; // #cwg1460-I-a263      int b = 0;264      // since-cxx11-error@-1 {{initializing multiple members of union}}265      //   since-cxx11-note@#cwg1460-I-a {{previous initialization is here}}266    };267  };268  struct J {269    union { int a = 0; };270    union { int b = 0; };271  };272 273  namespace Overriding {274    struct A {275      int a = 1, b, c = 3;276      constexpr A() : b(2) {}277    };278    static_assert(A().a == 1 && A().b == 2 && A().c == 3, "");279 280    union B {281      int a, b = 2, c;282      constexpr B() : a(1) {}283      constexpr B(char) : b(4) {}284      constexpr B(int) : c(3) {}285      constexpr B(const char*) {}286    };287    static_assert(B().a == 1, "");288    static_assert(B().b == 2, "");289    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}290    //   since-cxx11-note@-2 {{read of member 'b' of union with active member 'a' is not allowed in a constant expression}}291    static_assert(B('x').a == 0, "");292    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}293    //   since-cxx11-note@-2 {{read of member 'a' of union with active member 'b' is not allowed in a constant expression}}294    static_assert(B('x').b == 4, "");295    static_assert(B(123).b == 2, "");296    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}297    //   since-cxx11-note@-2 {{read of member 'b' of union with active member 'c' is not allowed in a constant expression}}298    static_assert(B(123).c == 3, "");299    static_assert(B("").a == 1, "");300    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}301    //   since-cxx11-note@-2 {{read of member 'a' of union with active member 'b' is not allowed in a constant expression}}302    static_assert(B("").b == 2, "");303    static_assert(B("").c == 3, "");304    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}305    //   since-cxx11-note@-2 {{read of member 'c' of union with active member 'b' is not allowed in a constant expression}}306 307    struct C {308      union { int a, b = 2, c; };309      union { int d, e = 5, f; };310      constexpr C() : a(1) {}311      constexpr C(char) : c(3) {}312      constexpr C(int) : d(4) {}313      constexpr C(float) : f(6) {}314      constexpr C(const char*) {}315    };316 317    static_assert(C().a == 1, "");318    static_assert(C().b == 2, "");319    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}320    //   since-cxx11-note@-2 {{read of member 'b' of union with active member 'a' is not allowed in a constant expression}}321    static_assert(C().d == 4, "");322    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}323    //   since-cxx11-note@-2 {{read of member 'd' of union with active member 'e' is not allowed in a constant expression}}324    static_assert(C().e == 5, "");325 326    static_assert(C('x').b == 2, "");327    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}328    //   since-cxx11-note@-2 {{read of member 'b' of union with active member 'c' is not allowed in a constant expression}}329    static_assert(C('x').c == 3, "");330    static_assert(C('x').d == 4, "");331    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}332    //   since-cxx11-note@-2 {{read of member 'd' of union with active member 'e' is not allowed in a constant expression}}333    static_assert(C('x').e == 5, "");334 335    static_assert(C(1).b == 2, "");336    static_assert(C(1).c == 3, "");337    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}338    //   since-cxx11-note@-2 {{read of member 'c' of union with active member 'b' is not allowed in a constant expression}}339    static_assert(C(1).d == 4, "");340    static_assert(C(1).e == 5, "");341    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}342    //   since-cxx11-note@-2 {{read of member 'e' of union with active member 'd' is not allowed in a constant expression}}343 344    static_assert(C(1.f).b == 2, "");345    static_assert(C(1.f).c == 3, "");346    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}347    //   since-cxx11-note@-2 {{read of member 'c' of union with active member 'b' is not allowed in a constant expression}}348    static_assert(C(1.f).e == 5, "");349    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}350    //   since-cxx11-note@-2 {{read of member 'e' of union with active member 'f' is not allowed in a constant expression}}351    static_assert(C(1.f).f == 6, "");352 353    static_assert(C("").a == 1, "");354    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}355    //   since-cxx11-note@-2 {{read of member 'a' of union with active member 'b' is not allowed in a constant expression}}356    static_assert(C("").b == 2, "");357    static_assert(C("").c == 3, "");358    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}359    //   since-cxx11-note@-2 {{read of member 'c' of union with active member 'b' is not allowed in a constant expression}}360    static_assert(C("").d == 4, "");361    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}362    //   since-cxx11-note@-2 {{read of member 'd' of union with active member 'e' is not allowed in a constant expression}}363    static_assert(C("").e == 5, "");364    static_assert(C("").f == 6, "");365    // since-cxx11-error@-1 {{static assertion expression is not an integral constant expression}}366    //   since-cxx11-note@-2 {{read of member 'f' of union with active member 'e' is not allowed in a constant expression}}367 368    struct D;369    extern const D d;370    struct D {371      int a;372      union {373        int b = const_cast<D&>(d).a = 1; // not evaluated374        int c;375      };376      constexpr D() : a(0), c(0) {}377    };378    constexpr D d {};379    static_assert(d.a == 0, "");380  }381#endif382} // namespace cwg1460383 384#if __cplusplus >= 201103L385namespace std {386  typedef decltype(sizeof(int)) size_t;387 388  // libc++'s implementation389  template <class _E>390  class initializer_list391  {392    const _E* __begin_;393    size_t    __size_;394 395    initializer_list(const _E* __b, size_t __s)396    : __begin_(__b), __size_(__s) {}397 398  public:399    typedef _E        value_type;400    typedef const _E& reference;401    typedef const _E& const_reference;402    typedef size_t    size_type;403 404    typedef const _E* iterator;405    typedef const _E* const_iterator;406 407    initializer_list() : __begin_(nullptr), __size_(0) {}408 409    size_t    size()  const {return __size_;}410    const _E* begin() const {return __begin_;}411    const _E* end()   const {return __begin_ + __size_;}412  };413} // namespace std414#endif415 416namespace cwg1467 {  // cwg1467: 3.7 c++11417#if __cplusplus >= 201103L418  // Note that the change to [over.best.ics] was partially undone by CWG2076;419  // the resulting rule is tested with the tests for that change.420 421  // List-initialization of aggregate from same-type object422 423  namespace basic0 {424    struct S {425      int i = 42;426    };427 428    S a;429    S b(a);430    S c{a};431 432    struct SS : public S { } x;433    S y(x);434    S z{x};435  } // basic0436 437  namespace basic1 {438    struct S {439      int i{42};440    };441 442    S a;443    S b(a);444    S c{a};445 446    struct SS : public S { } x;447    S y(x);448    S z{x};449  } // basic1450 451  namespace basic2 {452    struct S {453      int i = {42};454    };455 456    S a;457    S b(a);458    S c{a};459 460    struct SS : public S { } x;461    S y(x);462    S z{x};463  } // basic2464 465  namespace dr_example {466    struct OK {467      OK() = default;468      OK(const OK&) = default;469      OK(int) { }470    };471 472    OK ok;473    OK ok2{ok};474 475    struct X {476      X() = default;477      X(const X&) = default;478    };479 480    X x;481    X x2{x};482 483    void f1(int); // #cwg1467-f1484    void f1(std::initializer_list<long>) = delete; // #cwg1467-f1-deleted485    void g1() { f1({42}); }486    // since-cxx11-error@-1 {{call to deleted function 'f1'}}487    //   since-cxx11-note@#cwg1467-f1 {{candidate function}}488    //   since-cxx11-note@#cwg1467-f1-deleted {{candidate function has been explicitly deleted}}489 490    template <class T, class U>491    struct Pair {492      Pair(T, U);493    };494    struct String {495      String(const char *);496    };497 498    void f2(Pair<const char *, const char *>); // #cwg1467-f2499    void f2(std::initializer_list<String>) = delete; // #cwg1467-f2-deleted500    void g2() { f2({"foo", "bar"}); }501    // since-cxx11-error@-1 {{call to deleted function 'f2'}}502    //   since-cxx11-note@#cwg1467-f2 {{candidate function}}503    //   since-cxx11-note@#cwg1467-f2-deleted {{candidate function has been explicitly deleted}}504  } // dr_example505 506  namespace nonaggregate {507    struct NonAggregate {508      NonAggregate() {}509    };510 511    struct WantsIt {512      WantsIt(NonAggregate);513    };514 515    void f(NonAggregate);516    void f(WantsIt);517 518    void test1() {519      NonAggregate n;520      f({n});521    }522 523    void test2() {524      NonAggregate x;525      NonAggregate y{x};526      NonAggregate z{{x}};527    }528  } // nonaggregate529 530  struct NestedInit { int a, b, c; };531  NestedInit ni[1] = {{NestedInit{1, 2, 3}}};532 533  namespace NestedInit2 {534    struct Pair { int a, b; };535    struct TwoPairs { TwoPairs(Pair, Pair); };536    struct Value { Value(Pair); Value(TwoPairs); };537    void f() { Value{{{1,2},{3,4}}}; }538  }539  namespace NonAmbiguous {540  // The original implementation made this case ambiguous due to the special541  // handling of one element initialization lists.542  void f(int(&&)[1]);543  void f(unsigned(&&)[1]);544 545  void g(unsigned i) {546    f({i});547  }548  } // namespace NonAmbiguous549 550  namespace StringLiterals {551  // When the array size is 4 the call will attempt to bind an lvalue to an552  // rvalue and fail. Therefore #2 will be called. (rsmith will bring this553  // issue to CWG)554  void f(const char(&&)[4]);              // #cwg1467-f-char-4555  void f(const char(&&)[5]) = delete;     // #cwg1467-f-char-5556  void f(const wchar_t(&&)[4]);           // #cwg1467-f-wchar-4557  void f(const wchar_t(&&)[5]) = delete;  // #cwg1467-f-wchar-5558#if __cplusplus >= 202002L559  void f2(const char8_t(&&)[4]);          // #cwg1467-f2-char8-4560  void f2(const char8_t(&&)[5]) = delete; // #cwg1467-f2-char8-5561#endif562  void f(const char16_t(&&)[4]);          // #cwg1467-f-char16-4563  void f(const char16_t(&&)[5]) = delete; // #cwg1467-f-char16-5564  void f(const char32_t(&&)[4]);          // #cwg1467-f-char32-4565  void f(const char32_t(&&)[5]) = delete; // #cwg1467-f-char32-5566  void g() {567    f({"abc"});568    // since-cxx11-error@-1 {{call to deleted function 'f'}}569    //   since-cxx11-note@#cwg1467-f-char-5 {{candidate function has been explicitly deleted}}570    //   since-cxx11-note@#cwg1467-f-char-4 {{candidate function not viable: expects an rvalue for 1st argument}}571    //   since-cxx11-note@#cwg1467-f-wchar-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const wchar_t' for 1st argument}}572    //   since-cxx11-note@#cwg1467-f-wchar-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const wchar_t' for 1st argument}}573    //   since-cxx11-note@#cwg1467-f-char16-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char16_t' for 1st argument}}574    //   since-cxx11-note@#cwg1467-f-char16-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char16_t' for 1st argument}}575    //   since-cxx11-note@#cwg1467-f-char32-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char32_t' for 1st argument}}576    //   since-cxx11-note@#cwg1467-f-char32-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char32_t' for 1st argument}}577    f({((("abc")))});578    // since-cxx11-error@-1 {{call to deleted function 'f'}}579    //   since-cxx11-note@#cwg1467-f-char-5 {{candidate function has been explicitly deleted}}580    //   since-cxx11-note@#cwg1467-f-char-4 {{candidate function not viable: expects an rvalue for 1st argument}}581    //   since-cxx11-note@#cwg1467-f-wchar-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const wchar_t' for 1st argument}}582    //   since-cxx11-note@#cwg1467-f-wchar-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const wchar_t' for 1st argument}}583    //   since-cxx11-note@#cwg1467-f-char16-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char16_t' for 1st argument}}584    //   since-cxx11-note@#cwg1467-f-char16-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char16_t' for 1st argument}}585    //   since-cxx11-note@#cwg1467-f-char32-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char32_t' for 1st argument}}586    //   since-cxx11-note@#cwg1467-f-char32-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char32_t' for 1st argument}}587    f({L"abc"});588    // since-cxx11-error@-1 {{call to deleted function 'f'}}589    //   since-cxx11-note@#cwg1467-f-wchar-5 {{candidate function has been explicitly deleted}}590    //   since-cxx11-note@#cwg1467-f-char-4 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char' for 1st argument}}591    //   since-cxx11-note@#cwg1467-f-char-5 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char' for 1st argument}}592    //   since-cxx11-note@#cwg1467-f-wchar-4 {{candidate function not viable: expects an rvalue for 1st argument}}593    //   since-cxx11-note@#cwg1467-f-char16-4 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char16_t' for 1st argument}}594    //   since-cxx11-note@#cwg1467-f-char16-5 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char16_t' for 1st argument}}595    //   since-cxx11-note@#cwg1467-f-char32-4 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char32_t' for 1st argument}}596    //   since-cxx11-note@#cwg1467-f-char32-5 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char32_t' for 1st argument}}597#if __cplusplus >= 202002L598    f2({u8"abc"});599    // since-cxx20-error@-1 {{call to deleted function 'f2'}}600    //   since-cxx20-note@#cwg1467-f2-char8-5 {{candidate function has been explicitly deleted}}601    //   since-cxx20-note@#cwg1467-f2-char8-4 {{candidate function not viable: expects an rvalue for 1st argument}}602#endif603    f({uR"(abc)"});604    // since-cxx11-error@-1 {{call to deleted function 'f'}}605    //   since-cxx11-note@#cwg1467-f-char16-5 {{candidate function has been explicitly deleted}}606    //   since-cxx11-note@#cwg1467-f-char-4 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const char' for 1st argument}}607    //   since-cxx11-note@#cwg1467-f-char-5 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const char' for 1st argument}}608    //   since-cxx11-note@#cwg1467-f-wchar-4 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const wchar_t' for 1st argument}}609    //   since-cxx11-note@#cwg1467-f-wchar-5 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const wchar_t' for 1st argument}}610    //   since-cxx11-note@#cwg1467-f-char16-4 {{candidate function not viable: expects an rvalue for 1st argument}}611    //   since-cxx11-note@#cwg1467-f-char32-4 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const char32_t' for 1st argument}}612    //   since-cxx11-note@#cwg1467-f-char32-5 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const char32_t' for 1st argument}}613    f({(UR"(abc)")});614    // since-cxx11-error@-1 {{call to deleted function 'f'}}615    //   since-cxx11-note@#cwg1467-f-char32-5 {{candidate function has been explicitly deleted}}616    //   since-cxx11-note@#cwg1467-f-char-4 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const char' for 1st argument}}617    //   since-cxx11-note@#cwg1467-f-char-5 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const char' for 1st argument}}618    //   since-cxx11-note@#cwg1467-f-wchar-4 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const wchar_t' for 1st argument}}619    //   since-cxx11-note@#cwg1467-f-wchar-5 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const wchar_t' for 1st argument}}620    //   since-cxx11-note@#cwg1467-f-char16-4 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const char16_t' for 1st argument}}621    //   since-cxx11-note@#cwg1467-f-char16-5 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const char16_t' for 1st argument}}622    //   since-cxx11-note@#cwg1467-f-char32-4 {{candidate function not viable: expects an rvalue for 1st argument}}623  }624  } // namespace StringLiterals625#endif626} // namespace cwg1467627 628namespace cwg1477 { // cwg1477: 2.7629namespace N {630struct A {631  // Name "f" is not bound in N,632  // so single searches of 'f' in N won't find it,633  // but the targets scope of this declaration is N,634  // making it nominable in N.635  // (_N4988_.[dcl.meaning]/2.1, [basic.scope.scope]/7,636  //  [basic.lookup.general]/3)637  friend int f();638};639}640// Corresponds to the friend declaration,641// because it's nominable in N,642// and binds name 'f' in N.643// (_N4988_.[dcl.meaning]/3.4, [basic.scope.scope]/2.5)644int N::f() { return 0; }645// Name 'f' is bound in N,646// so the search performed by qualified lookup finds it.647int i = N::f();648} // namespace cwg1477649 650namespace cwg1479 { // cwg1479: 3.1651#if __cplusplus >= 201103L652  int operator""_a(const char*, std::size_t = 0);653  // since-cxx11-error@-1 {{literal operator cannot have a default argument}}654#endif655} // namespace cwg1479656 657namespace cwg1482 { // cwg1482: 3.0658                   // NB: sup 2516, test reused there659#if __cplusplus >= 201103L660template <typename T> struct S {661  typedef char I;662};663enum E2 : S<E2>::I { e };664// since-cxx11-error@-1 {{use of undeclared identifier 'E2'}}665#endif666} // namespace cwg1482667 668namespace cwg1487 { // cwg1487: 3.3669#if __cplusplus >= 201103L670struct A { // #cwg1482-A671  struct B {672    using A::A;673    // since-cxx11-error@-1 {{using declaration refers into 'A', which is not a base class of 'B'}}674  };675 676  struct C : A {677  // since-cxx11-error@-1 {{base class has incomplete type}}678  //   since-cxx11-note@#cwg1482-A {{definition of 'cwg1487::A' is not complete until the closing '}'}}679    using A::A;680    // since-cxx11-error@-1 {{using declaration refers into 'A', which is not a base class of 'C'}}681  };682 683  struct D;684};685 686struct D : A {687  using A::A;688};689#endif690} // namespace cwg1487691 692namespace cwg1490 {  // cwg1490: 3.7 c++11693#if __cplusplus >= 201103L694  // List-initialization from a string literal695 696  char s[4]{"abc"}; // Ok697  std::initializer_list<char>{"abc"};698  // since-cxx11-error@-1 {{expected unqualified-id}}}699#endif700} // namespace cwg1490701 702namespace cwg1495 { // cwg1495: 4703#if __cplusplus >= 201103L704  // Deduction succeeds in both directions.705  template<typename T, typename U> struct A {}; // #cwg1495-A706  template<typename T, typename U> struct A<U, T> {};707  // since-cxx11-error@-1 {{class template partial specialization is not more specialized than the primary template}}708  //   since-cxx11-note@#cwg1495-A {{template is declared here}}709 710  // Primary template is more specialized.711  template<typename, typename...> struct B {}; // #cwg1495-B712  template<typename ...Ts> struct B<Ts...> {};713  // since-cxx11-error@-1 {{class template partial specialization is not more specialized than the primary template}}714  //   since-cxx11-note@#cwg1495-B {{template is declared here}}715 716  // Deduction fails in both directions.717  template<int, typename, typename ...> struct C {}; // #cwg1495-C718  template<typename ...Ts> struct C<0, Ts...> {};719  // since-cxx11-error@-1 {{class template partial specialization is not more specialized than the primary template}}720  //   since-cxx11-note@#cwg1495-C {{template is declared here}}721 722#if __cplusplus >= 201402L723  // Deduction succeeds in both directions.724  template<typename T, typename U> int a; // #cwg1495-a725  template<typename T, typename U> int a<U, T>;726  // since-cxx14-error@-1 {{variable template partial specialization is not more specialized than the primary template}}727  //   since-cxx14-note@#cwg1495-a {{template is declared here}}728 729  // Primary template is more specialized.730  template<typename, typename...> int b; // #cwg1495-b731  template<typename ...Ts> int b<Ts...>;732  // since-cxx14-error@-1 {{variable template partial specialization is not more specialized than the primary template}}733  //   since-cxx14-note@#cwg1495-b {{template is declared here}}734 735  // Deduction fails in both directions.736  template<int, typename, typename ...> int c; // #cwg1495-c737  template<typename ...Ts> int c<0, Ts...>;738  // since-cxx14-error@-1 {{variable template partial specialization is not more specialized than the primary template}}739  //   since-cxx14-note@#cwg1495-c {{template is declared here}}740#endif741#endif742} // namespace cwg1495743 744namespace cwg1496 { // cwg1496: no745#if __cplusplus >= 201103L746struct A {747    A() = delete;748};749// FIXME: 'A' should not be trivial because the class lacks at least one750// default constructor which is not deleted.751static_assert(__is_trivial(A), "");752#endif753} // namespace cwg1496754