1 // RUN: %clang_cc1 -std=c++98 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 2 // RUN: %clang_cc1 -std=c++11 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 3 // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 4 // RUN: %clang_cc1 -std=c++1z %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 5 6 namespace dr300 { // dr300: yes f(R (&)(A))7 template<typename R, typename A> void f(R (&)(A)) {} 8 int g(int); h()9 void h() { f(g); } 10 } 11 12 namespace dr301 { // dr301: yes 13 // see also dr38 14 struct S; 15 template<typename T> void operator+(T, T); 16 void operator-(S, S); 17 f()18 void f() { 19 bool a = (void(*)(S, S))operator+<S> < 20 (void(*)(S, S))operator+<S>; 21 bool b = (void(*)(S, S))operator- < 22 (void(*)(S, S))operator-; 23 bool c = (void(*)(S, S))operator+ < 24 (void(*)(S, S))operator-; // expected-error {{expected '>'}} 25 } 26 f()27 template<typename T> void f() { 28 typename T::template operator+<int> a; // expected-error {{typename specifier refers to a non-type template}} expected-error +{{}} 29 // FIXME: This shouldn't say (null). 30 class T::template operator+<int> b; // expected-error {{identifier followed by '<' indicates a class template specialization but (null) refers to a function template}} 31 enum T::template operator+<int> c; // expected-error {{expected identifier}} expected-error {{does not declare anything}} 32 enum T::template operator+<int>::E d; // expected-error {{qualified name refers into a specialization of function template 'T::template operator +'}} expected-error {{forward reference}} 33 enum T::template X<int>::E e; 34 T::template operator+<int>::foobar(); // expected-error {{qualified name refers into a specialization of function template 'T::template operator +'}} 35 T::template operator+<int>(0); // ok 36 } 37 38 template<typename T> class operator&<T*> {}; // expected-error +{{}} 39 template<typename T> class T::operator& {}; // expected-error +{{}} 40 template<typename T> class S::operator&<T*> {}; // expected-error +{{}} 41 } 42 43 namespace dr302 { // dr302: yes 44 struct A { A(); ~A(); }; 45 #if __cplusplus < 201103L 46 struct B { // expected-error {{implicit default constructor for 'dr302::B' must explicitly initialize the const member 'n'}} 47 const int n; // expected-note {{declared here}} 48 A a; 49 } b = B(); // expected-note {{first required here}} 50 // Trivial default constructor C::C() is not called here. 51 struct C { 52 const int n; 53 } c = C(); 54 #else 55 struct B { 56 const int n; // expected-note {{deleted because field 'n' of const-qualified type 'const int' would not be initialized}} 57 A a; 58 } b = B(); // expected-error {{call to implicitly-deleted default constructor}} 59 // C::C() is called here, because even though it's trivial, it's deleted. 60 struct C { 61 const int n; // expected-note {{deleted because field 'n' of const-qualified type 'const int' would not be initialized}} 62 } c = C(); // expected-error {{call to implicitly-deleted default constructor}} 63 struct D { 64 const int n = 0; 65 } d = D(); 66 #endif 67 } 68 69 // dr303: na 70 71 namespace dr304 { // dr304: yes 72 typedef int &a; 73 int n = a(); // expected-error {{requires an initializer}} 74 75 struct S { int &b; }; 76 int m = S().b; 77 #if __cplusplus < 201103L 78 // expected-error@-3 {{requires an initializer}} 79 // expected-note@-3 {{in value-initialization}} 80 #else 81 // expected-error@-5 {{deleted}} 82 // expected-note@-7 {{reference}} 83 #endif 84 } 85 86 namespace dr305 { // dr305: no 87 struct A { 88 typedef A C; 89 }; f(A * a)90 void f(A *a) { 91 struct A {}; 92 a->~A(); 93 a->~C(); 94 } 95 typedef A B; g(B * b)96 void g(B *b) { 97 b->~B(); 98 b->~C(); 99 } h(B * b)100 void h(B *b) { 101 struct B {}; // expected-note {{declared here}} 102 b->~B(); // expected-error {{does not match}} 103 } 104 105 template<typename T> struct X {}; i(X<int> * x)106 void i(X<int>* x) { 107 struct X {}; 108 x->~X<int>(); 109 x->~X(); 110 x->~X<char>(); // expected-error {{no member named}} 111 } 112 113 // FIXME: This appears to be valid (but allowing the nested types might be a 114 // defect). 115 template<typename> struct Nested { 116 template<typename> struct Nested {}; 117 }; testNested(Nested<int> n)118 void testNested(Nested<int> n) { n.~Nested<int>(); } // expected-error {{no member named}} 119 #if __cplusplus < 201103L 120 // expected-error@-2 {{ambiguous}} 121 // expected-note@-6 {{here}} 122 // expected-note@-6 {{here}} 123 #endif 124 125 #if __cplusplus >= 201103L 126 struct Y { 127 template<typename T> using T1 = Y; 128 }; 129 template<typename T> using T2 = Y; j(Y * y)130 void j(Y *y) { 131 y->~T1<int>(); 132 y->~T2<int>(); 133 } 134 struct Z { 135 template<typename T> using T2 = T; 136 }; k(Z * z)137 void k(Z *z) { 138 // FIXME: This diagnostic is terrible. 139 z->~T1<int>(); // expected-error {{'T1' following the 'template' keyword does not refer to a template}} expected-error +{{}} 140 z->~T2<int>(); // expected-error {{no member named '~int'}} 141 z->~T2<Z>(); 142 } 143 144 // FIXME: This is valid. 145 namespace Q { 146 template<typename A> struct R {}; 147 } 148 template<typename A> using R = Q::R<int>; qr(Q::R<int> x)149 void qr(Q::R<int> x) { x.~R<char>(); } // expected-error {{no member named}} 150 #endif 151 } 152 153 namespace dr306 { // dr306: no 154 // FIXME: dup 39 155 // FIXME: This should be accepted. 156 struct A { struct B {}; }; // expected-note 2{{member}} 157 struct C { typedef A::B B; }; // expected-note {{member}} 158 struct D : A, A::B, C {}; 159 D::B b; // expected-error {{found in multiple base classes of different types}} 160 } 161 162 // dr307: na 163 164 namespace dr308 { // dr308: yes 165 // This is mostly an ABI library issue. 166 struct A {}; 167 struct B : A {}; 168 struct C : A {}; 169 struct D : B, C {}; f()170 void f() { 171 try { 172 throw D(); 173 } catch (const A&) { // expected-note {{for type 'const dr308::A &'}} 174 // unreachable 175 } catch (const B&) { // expected-warning {{exception of type 'const dr308::B &' will be caught by earlier handler}} 176 // get here instead 177 } 178 } 179 } 180 181 // dr309: dup 485 182 183 namespace dr311 { // dr311: yes 184 namespace X { namespace Y {} } 185 namespace X::Y {} 186 #if __cplusplus <= 201402L 187 // expected-error@-2 {{define each namespace separately}} 188 #endif 189 namespace X { 190 namespace X::Y {} 191 #if __cplusplus <= 201402L 192 // expected-error@-2 {{define each namespace separately}} 193 #endif 194 } 195 // FIXME: The diagnostics here are not very good. 196 namespace ::dr311::X {} // expected-error 2+{{}} // expected-warning {{extra qual}} 197 } 198 199 // dr312: dup 616 200 201 namespace dr313 { // dr313: dup 299 c++11 202 struct A { operator int() const; }; 203 int *p = new int[A()]; 204 #if __cplusplus < 201103L 205 // FIXME: should this be available in c++98 mode? expected-error@-2 {{extension}} 206 #endif 207 } 208 209 namespace dr314 { // FIXME 314: dup 1710 210 template<typename T> struct A { 211 template<typename U> struct B {}; 212 }; 213 template<typename T> struct C : public A<T>::template B<T> { 214 C() : A<T>::template B<T>() {} 215 }; 216 } 217 218 // dr315: na 219 // dr316: sup 1004 220 221 namespace dr317 { // dr317: 3.5 222 void f() {} // expected-note {{previous}} 223 inline void f(); // expected-error {{inline declaration of 'f' follows non-inline definition}} 224 225 int g(); 226 int n = g(); 227 inline int g() { return 0; } 228 229 int h(); 230 int m = h(); 231 int h() { return 0; } // expected-note {{previous}} 232 inline int h(); // expected-error {{inline declaration of 'h' follows non-inline definition}} 233 } 234 235 namespace dr318 { // dr318: sup 1310 236 struct A {}; 237 struct A::A a; 238 } 239 240 namespace dr319 { // dr319: no 241 // FIXME: dup dr389 242 // FIXME: We don't have a diagnostic for a name with linkage 243 // having a type without linkage. 244 typedef struct { 245 int i; 246 } *ps; 247 extern "C" void f(ps); 248 void g(ps); // FIXME: ill-formed, type 'ps' has no linkage 249 250 static enum { e } a1; 251 enum { e2 } a2; // FIXME: ill-formed, enum type has no linkage 252 253 enum { n1 = 1u }; 254 typedef int (*pa)[n1]; 255 pa parr; // ok, type has linkage despite using 'n1' 256 257 template<typename> struct X {}; 258 259 void f() { 260 struct A { int n; }; 261 extern A a; // FIXME: ill-formed 262 X<A> xa; 263 264 typedef A B; 265 extern B b; // FIXME: ill-formed 266 X<B> xb; 267 268 const int n = 1; 269 typedef int (*C)[n]; 270 extern C c; // ok 271 X<C> xc; 272 } 273 #if __cplusplus < 201103L 274 // expected-error@-12 {{uses local type 'A'}} 275 // expected-error@-9 {{uses local type 'A'}} 276 #endif 277 } 278 279 namespace dr320 { // dr320: yes 280 #if __cplusplus >= 201103L 281 struct X { 282 constexpr X() {} 283 constexpr X(const X &x) : copies(x.copies + 1) {} 284 unsigned copies = 0; 285 }; 286 constexpr X f(X x) { return x; } 287 constexpr unsigned g(X x) { return x.copies; } 288 static_assert(f(X()).copies == g(X()) + 1, "expected one extra copy for return value"); 289 #endif 290 } 291 292 namespace dr321 { // dr321: dup 557 293 namespace N { 294 template<int> struct A { 295 template<int> struct B; 296 }; 297 template<> template<> struct A<0>::B<0>; 298 void f(A<0>::B<0>); 299 } 300 template<> template<> struct N::A<0>::B<0> {}; 301 302 template<typename T> void g(T t) { f(t); } 303 template void g(N::A<0>::B<0>); 304 305 namespace N { 306 template<typename> struct I { friend bool operator==(const I&, const I&); }; 307 } 308 N::I<int> i, j; 309 bool x = i == j; 310 } 311 312 namespace dr322 { // dr322: yes 313 struct A { 314 template<typename T> operator T&(); 315 } a; 316 int &r = static_cast<int&>(a); 317 int &s = a; 318 } 319 320 // dr323: no 321 322 namespace dr324 { // dr324: yes 323 struct S { int n : 1; } s; // expected-note 3{{bit-field is declared here}} 324 int &a = s.n; // expected-error {{non-const reference cannot bind to bit-field}} 325 int *b = &s.n; // expected-error {{address of bit-field}} 326 int &c = (s.n = 0); // expected-error {{non-const reference cannot bind to bit-field}} 327 int *d = &(s.n = 0); // expected-error {{address of bit-field}} 328 int &e = true ? s.n : s.n; // expected-error {{non-const reference cannot bind to bit-field}} 329 int *f = &(true ? s.n : s.n); // expected-error {{address of bit-field}} 330 int &g = (void(), s.n); // expected-error {{non-const reference cannot bind to bit-field}} 331 int *h = &(void(), s.n); // expected-error {{address of bit-field}} 332 int *i = &++s.n; // expected-error {{address of bit-field}} 333 } 334 335 namespace dr326 { // dr326: yes 336 struct S {}; 337 int test[__is_trivially_constructible(S, const S&) ? 1 : -1]; 338 } 339 340 namespace dr327 { // dr327: dup 538 341 struct A; 342 class A {}; 343 344 class B; 345 struct B {}; 346 } 347 348 namespace dr328 { // dr328: yes 349 struct A; // expected-note 3{{forward declaration}} 350 struct B { A a; }; // expected-error {{incomplete}} 351 template<typename> struct C { A a; }; // expected-error {{incomplete}} 352 A *p = new A[0]; // expected-error {{incomplete}} 353 } 354 355 namespace dr329 { // dr329: 3.5 356 struct B {}; 357 template<typename T> struct A : B { 358 friend void f(A a) { g(a); } 359 friend void h(A a) { g(a); } // expected-error {{undeclared}} 360 friend void i(B b) {} // expected-error {{redefinition}} expected-note {{previous}} 361 }; 362 A<int> a; 363 A<char> b; // expected-note {{instantiation}} 364 365 void test() { 366 h(a); // expected-note {{instantiation}} 367 } 368 } 369 370 namespace dr331 { // dr331: yes 371 struct A { 372 A(volatile A&); // expected-note {{candidate}} 373 } const a, b(a); // expected-error {{no matching constructor}} 374 } 375 376 namespace dr332 { // dr332: dup 577 377 void f(volatile void); // expected-error {{'void' as parameter must not have type qualifiers}} 378 void g(const void); // expected-error {{'void' as parameter must not have type qualifiers}} 379 void h(int n, volatile void); // expected-error {{'void' must be the first and only parameter}} 380 } 381 382 namespace dr333 { // dr333: yes 383 int n = 0; 384 int f(int(n)); 385 int g((int(n))); 386 int h = f(g); 387 } 388 389 namespace dr334 { // dr334: yes 390 template<typename T> void f() { 391 T x; 392 f((x, 123)); 393 } 394 struct S { 395 friend S operator,(S, int); 396 friend void f(S); 397 }; 398 template void f<S>(); 399 } 400 401 // dr335: no 402 403 namespace dr336 { // dr336: yes 404 namespace Pre { 405 template<class T1> class A { 406 template<class T2> class B { 407 template<class T3> void mf1(T3); 408 void mf2(); 409 }; 410 }; 411 template<> template<class X> class A<int>::B {}; 412 template<> template<> template<class T> void A<int>::B<double>::mf1(T t) {} // expected-error {{does not match}} 413 template<class Y> template<> void A<Y>::B<double>::mf2() {} // expected-error {{does not refer into a class}} 414 } 415 namespace Post { 416 template<class T1> class A { 417 template<class T2> class B { 418 template<class T3> void mf1(T3); 419 void mf2(); 420 }; 421 }; 422 template<> template<class X> class A<int>::B { 423 template<class T> void mf1(T); 424 }; 425 template<> template<> template<class T> void A<int>::B<double>::mf1(T t) {} 426 // FIXME: This diagnostic isn't very good. 427 template<class Y> template<> void A<Y>::B<double>::mf2() {} // expected-error {{does not refer into a class}} 428 } 429 } 430 431 namespace dr337 { // dr337: yes 432 template<typename T> void f(T (*)[1]); 433 template<typename T> int &f(...); 434 435 struct A { virtual ~A() = 0; }; 436 int &r = f<A>(0); 437 438 // FIXME: The language rules here are completely broken. We cannot determine 439 // whether an incomplete type is abstract. See DR1640, which will probably 440 // supersede this one and remove this rule. 441 struct B; 442 int &s = f<B>(0); // expected-error {{of type 'void'}} 443 struct B { virtual ~B() = 0; }; 444 } 445 446 namespace dr339 { // dr339: yes 447 template <int I> struct A { static const int value = I; }; 448 449 char xxx(int); 450 char (&xxx(float))[2]; 451 452 template<class T> A<sizeof(xxx((T)0))> f(T) {} // expected-note {{candidate}} 453 454 void test() { 455 A<1> a = f(0); 456 A<2> b = f(0.0f); 457 A<3> c = f("foo"); // expected-error {{no matching function}} 458 } 459 460 461 char f(int); 462 int f(...); 463 464 template <class T> struct conv_int { 465 static const bool value = sizeof(f(T())) == 1; 466 }; 467 468 template <class T> bool conv_int2(A<sizeof(f(T()))> p); 469 470 template<typename T> A<sizeof(f(T()))> make_A(); 471 472 int a[conv_int<char>::value ? 1 : -1]; 473 bool b = conv_int2<char>(A<1>()); 474 A<1> c = make_A<char>(); 475 } 476 477 namespace dr340 { // dr340: yes 478 struct A { A(int); }; 479 struct B { B(A, A, int); }; 480 int x, y; 481 B b(A(x), A(y), 3); 482 } 483 484 namespace dr341 { // dr341: sup 1708 485 namespace A { 486 int n; 487 extern "C" int &dr341_a = n; // expected-note {{previous}} expected-note {{declared with C language linkage here}} 488 } 489 namespace B { 490 extern "C" int &dr341_a = dr341_a; // expected-error {{redefinition}} 491 } 492 extern "C" void dr341_b(); // expected-note {{declared with C language linkage here}} 493 } 494 int dr341_a; // expected-error {{declaration of 'dr341_a' in global scope conflicts with declaration with C language linkage}} 495 int dr341_b; // expected-error {{declaration of 'dr341_b' in global scope conflicts with declaration with C language linkage}} 496 int dr341_c; // expected-note {{declared in global scope here}} 497 int dr341_d; // expected-note {{declared in global scope here}} 498 namespace dr341 { 499 extern "C" int dr341_c; // expected-error {{declaration of 'dr341_c' with C language linkage conflicts with declaration in global scope}} 500 extern "C" void dr341_d(); // expected-error {{declaration of 'dr341_d' with C language linkage conflicts with declaration in global scope}} 501 502 namespace A { extern "C" int dr341_e; } // expected-note {{previous}} 503 namespace B { extern "C" void dr341_e(); } // expected-error {{redefinition of 'dr341_e' as different kind of symbol}} 504 } 505 506 // dr342: na 507 508 namespace dr343 { // FIXME 343: no 509 // FIXME: dup 1710 510 template<typename T> struct A { 511 template<typename U> struct B {}; 512 }; 513 // FIXME: In these contexts, the 'template' keyword is optional. 514 template<typename T> struct C : public A<T>::B<T> { // expected-error {{use 'template'}} 515 C() : A<T>::B<T>() {} // expected-error {{use 'template'}} 516 }; 517 } 518 519 namespace dr344 { // dr344: dup 1435 520 struct A { inline virtual ~A(); }; 521 struct B { friend A::~A(); }; 522 } 523 524 namespace dr345 { // dr345: yes 525 struct A { 526 struct X {}; 527 int X; // expected-note {{here}} 528 }; 529 struct B { 530 struct X {}; 531 }; 532 template <class T> void f(T t) { typename T::X x; } // expected-error {{refers to non-type member 'X'}} 533 void f(A a, B b) { 534 f(b); 535 f(a); // expected-note {{instantiation}} 536 } 537 } 538 539 // dr346: na 540 541 namespace dr347 { // dr347: yes 542 struct base { 543 struct nested; 544 static int n; 545 static void f(); 546 void g(); 547 }; 548 549 struct derived : base {}; 550 551 struct derived::nested {}; // expected-error {{no struct named 'nested'}} 552 int derived::n; // expected-error {{no member named 'n'}} 553 void derived::f() {} // expected-error {{does not match any}} 554 void derived::g() {} // expected-error {{does not match any}} 555 } 556 557 // dr348: na 558 559 namespace dr349 { // dr349: no 560 struct A { 561 template <class T> operator T ***() { 562 int ***p = 0; 563 return p; // expected-error {{cannot initialize return object of type 'const int ***' with an lvalue of type 'int ***'}} 564 } 565 }; 566 567 // FIXME: This is valid. 568 A a; 569 const int *const *const *p1 = a; // expected-note {{in instantiation of}} 570 571 struct B { 572 template <class T> operator T ***() { 573 const int ***p = 0; 574 return p; 575 } 576 }; 577 578 // FIXME: This is invalid. 579 B b; 580 const int *const *const *p2 = b; 581 } 582 583 // dr351: na 584 585 namespace dr352 { // dr352: yes 586 namespace example1 { 587 namespace A { 588 enum E {}; 589 template<typename R, typename A> void foo(E, R (*)(A)); // expected-note 2{{couldn't infer template argument 'R'}} 590 } 591 592 template<typename T> void arg(T); 593 template<typename T> int arg(T) = delete; // expected-note {{here}} expected-error 0-1{{extension}} 594 595 void f(A::E e) { 596 foo(e, &arg); // expected-error {{no matching function}} 597 598 using A::foo; 599 foo<int, int>(e, &arg); // expected-error {{deleted}} 600 } 601 602 int arg(int); 603 604 void g(A::E e) { 605 foo(e, &arg); // expected-error {{no matching function}} 606 607 using A::foo; 608 foo<int, int>(e, &arg); // ok, uses non-template 609 } 610 } 611 612 namespace contexts { 613 template<int I> void f1(int (&)[I]); 614 template<int I> void f2(int (&)[I+1]); // expected-note {{couldn't infer}} 615 template<int I> void f3(int (&)[I+1], int (&)[I]); 616 void f() { 617 int a[4]; 618 int b[3]; 619 f1(a); 620 f2(a); // expected-error {{no matching function}} 621 f3(a, b); 622 } 623 624 template<int I> struct S {}; 625 template<int I> void g1(S<I>); 626 template<int I> void g2(S<I+1>); // expected-note {{couldn't infer}} 627 template<int I> void g3(S<I+1>, S<I>); 628 void g() { 629 S<4> a; 630 S<3> b; 631 g1(a); 632 g2(a); // expected-error {{no matching function}} 633 g3(a, b); 634 } 635 636 template<typename T> void h1(T = 0); // expected-note {{couldn't infer}} 637 template<typename T> void h2(T, T = 0); 638 void h() { 639 h1(); // expected-error {{no matching function}} 640 h1(0); 641 h1<int>(); 642 h2(0); 643 } 644 645 template<typename T> int tmpl(T); 646 template<typename R, typename A> void i1(R (*)(A)); // expected-note 3{{couldn't infer}} 647 template<typename R, typename A> void i2(R, A, R (*)(A)); // expected-note {{not viable}} 648 void i() { 649 extern int single(int); 650 i1(single); 651 i2(0, 0, single); 652 653 extern int ambig(float), ambig(int); 654 i1(ambig); // expected-error {{no matching function}} 655 i2(0, 0, ambig); 656 657 extern void no_match(float), no_match(int); 658 i1(no_match); // expected-error {{no matching function}} 659 i2(0, 0, no_match); // expected-error {{no matching function}} 660 661 i1(tmpl); // expected-error {{no matching function}} 662 i2(0, 0, tmpl); 663 } 664 } 665 666 template<typename T> struct is_int; 667 template<> struct is_int<int> {}; 668 669 namespace example2 { 670 template<typename T> int f(T (*p)(T)) { is_int<T>(); } 671 int g(int); 672 int g(char); 673 int i = f(g); 674 } 675 676 namespace example3 { 677 template<typename T> int f(T, T (*p)(T)) { is_int<T>(); } 678 int g(int); 679 char g(char); 680 int i = f(1, g); 681 } 682 683 namespace example4 { 684 template <class T> int f(T, T (*p)(T)) { is_int<T>(); } 685 char g(char); 686 template <class T> T g(T); 687 int i = f(1, g); 688 } 689 690 namespace example5 { 691 template<int I> class A {}; 692 template<int I> void g(A<I+1>); // expected-note {{couldn't infer}} 693 template<int I> void f(A<I>, A<I+1>); 694 void h(A<1> a1, A<2> a2) { 695 g(a1); // expected-error {{no matching function}} 696 g<0>(a1); 697 f(a1, a2); 698 } 699 } 700 } 701 702 // dr353 needs an IRGen test. 703 704 namespace dr354 { // dr354: yes c++11 705 // FIXME: Should we allow this in C++98 too? 706 struct S {}; 707 708 template<int*> struct ptr {}; // expected-note 0-4{{here}} 709 ptr<0> p0; 710 ptr<(int*)0> p1; 711 ptr<(float*)0> p2; 712 ptr<(int S::*)0> p3; 713 #if __cplusplus < 201103L 714 // expected-error@-5 {{does not refer to any decl}} 715 // expected-error@-5 {{does not refer to any decl}} 716 // expected-error@-5 {{does not refer to any decl}} 717 // expected-error@-5 {{does not refer to any decl}} 718 #elif __cplusplus <= 201402L 719 // expected-error@-10 {{must be cast}} 720 // ok 721 // expected-error@-10 {{does not match}} 722 // expected-error@-10 {{does not match}} 723 #else 724 // expected-error@-15 {{conversion from 'int' to 'int *' is not allowed}} 725 // ok 726 // expected-error@-15 {{'float *' is not implicitly convertible to 'int *'}} 727 // expected-error@-15 {{'int dr354::S::*' is not implicitly convertible to 'int *'}} 728 #endif 729 730 template<int*> int both(); 731 template<int> int both(); 732 int b0 = both<0>(); 733 int b1 = both<(int*)0>(); 734 #if __cplusplus < 201103L 735 // expected-error@-2 {{no matching function}} 736 // expected-note@-6 {{candidate}} 737 // expected-note@-6 {{candidate}} 738 #endif 739 740 template<int S::*> struct ptr_mem {}; // expected-note 0-4{{here}} 741 ptr_mem<0> m0; 742 ptr_mem<(int S::*)0> m1; 743 ptr_mem<(float S::*)0> m2; 744 ptr_mem<(int *)0> m3; 745 #if __cplusplus < 201103L 746 // expected-error@-5 {{cannot be converted}} 747 // expected-error@-5 {{is not a pointer to member constant}} 748 // expected-error@-5 {{cannot be converted}} 749 // expected-error@-5 {{cannot be converted}} 750 #elif __cplusplus <= 201402L 751 // expected-error@-10 {{must be cast}} 752 // ok 753 // expected-error@-10 {{does not match}} 754 // expected-error@-10 {{does not match}} 755 #else 756 // expected-error@-15 {{conversion from 'int' to 'int dr354::S::*' is not allowed}} 757 // ok 758 // expected-error@-15 {{'float dr354::S::*' is not implicitly convertible to 'int dr354::S::*'}} 759 // expected-error@-15 {{'int *' is not implicitly convertible to 'int dr354::S::*'}} 760 #endif 761 } 762 763 struct dr355_S; // dr355: yes 764 struct ::dr355_S {}; // expected-warning {{extra qualification}} 765 namespace dr355 { struct ::dr355_S s; } 766 767 // dr356: na 768 769 namespace dr357 { // dr357: yes 770 template<typename T> struct A { 771 void f() const; // expected-note {{const qualified}} 772 }; 773 template<typename T> void A<T>::f() {} // expected-error {{does not match}} 774 775 struct B { 776 template<typename T> void f(); 777 }; 778 template<typename T> void B::f() const {} // expected-error {{does not match}} 779 } 780 781 namespace dr358 { // dr358: yes 782 extern "C" void dr358_f(); 783 namespace N { 784 int var; 785 extern "C" void dr358_f() { var = 10; } 786 } 787 } 788 789 namespace dr359 { // dr359: yes 790 // Note, the example in the DR is wrong; it doesn't contain an anonymous 791 // union. 792 struct E { 793 union { 794 struct { 795 int x; 796 } s; 797 } v; 798 799 union { 800 struct { // expected-error {{extension}} 801 int x; 802 } s; 803 804 struct S { // expected-error {{types cannot be declared in an anonymous union}} 805 int x; 806 } t; 807 808 union { // expected-error {{extension}} 809 int u; 810 }; 811 }; 812 }; 813 } 814 815 // dr362: na 816 // dr363: na 817 818 namespace dr364 { // dr364: yes 819 struct S { 820 static void f(int); 821 void f(char); 822 }; 823 824 void g() { 825 S::f('a'); // expected-error {{call to non-static}} 826 S::f(0); 827 } 828 } 829 830 #if "foo" // expected-error {{invalid token}} dr366: yes 831 #endif 832 833 namespace dr367 { // dr367: yes 834 // FIXME: These diagnostics are terrible. Don't diagnose an ill-formed global 835 // array as being a VLA! 836 int a[true ? throw 0 : 4]; // expected-error 2{{variable length array}} 837 int b[true ? 4 : throw 0]; 838 int c[true ? *new int : 4]; // expected-error 2{{variable length array}} 839 int d[true ? 4 : *new int]; 840 #if __cplusplus < 201103L 841 // expected-error@-4 {{variable length array}} expected-error@-4 {{constant expression}} 842 // expected-error@-3 {{variable length array}} expected-error@-3 {{constant expression}} 843 #endif 844 } 845 846 namespace dr368 { // dr368: yes 847 template<typename T, T> struct S {}; // expected-note {{here}} 848 template<typename T> int f(S<T, T()> *); // expected-error {{function type}} 849 //template<typename T> int g(S<T, (T())> *); // FIXME: crashes clang 850 template<typename T> int g(S<T, true ? T() : T()> *); // expected-note {{cannot have type 'dr368::X'}} 851 struct X {}; 852 int n = g<X>(0); // expected-error {{no matching}} 853 } 854 855 // dr370: na 856 857 namespace dr372 { // dr372: no 858 namespace example1 { 859 template<typename T> struct X { 860 protected: 861 typedef T Type; // expected-note 2{{protected}} 862 }; 863 template<typename T> struct Y {}; 864 865 // FIXME: These two are valid; deriving from T1<T> gives Z1 access to 866 // the protected member T1<T>::Type. 867 template<typename T, 868 template<typename> class T1, 869 template<typename> class T2> struct Z1 : 870 T1<T>, 871 T2<typename T1<T>::Type> {}; // expected-error {{protected}} 872 873 template<typename T, 874 template<typename> class T1, 875 template<typename> class T2> struct Z2 : 876 T2<typename T1<T>::Type>, // expected-error {{protected}} 877 T1<T> {}; 878 879 Z1<int, X, Y> z1; // expected-note {{instantiation of}} 880 Z2<int, X, Y> z2; // expected-note {{instantiation of}} 881 } 882 883 namespace example2 { 884 struct X { 885 private: 886 typedef int Type; // expected-note {{private}} 887 }; 888 template<typename T> struct A { 889 typename T::Type t; // expected-error {{private}} 890 }; 891 A<X> ax; // expected-note {{instantiation of}} 892 } 893 894 namespace example3 { 895 struct A { 896 protected: 897 typedef int N; // expected-note 2{{protected}} 898 }; 899 900 template<typename T> struct B {}; 901 template<typename U> struct C : U, B<typename U::N> {}; // expected-error {{protected}} 902 template<typename U> struct D : B<typename U::N>, U {}; // expected-error {{protected}} 903 904 C<A> x; // expected-note {{instantiation of}} 905 D<A> y; // expected-note {{instantiation of}} 906 } 907 908 namespace example4 { 909 class A { 910 class B {}; 911 friend class X; 912 }; 913 914 struct X : A::B { 915 A::B mx; 916 class Y { 917 A::B my; 918 }; 919 }; 920 } 921 } 922 923 namespace dr373 { // dr373: no 924 // FIXME: This is valid. 925 namespace X { int dr373; } // expected-note 2{{here}} 926 struct dr373 { // expected-note {{here}} 927 void f() { 928 using namespace dr373::X; // expected-error {{no namespace named 'X' in 'dr373::dr373'}} 929 int k = dr373; // expected-error {{does not refer to a value}} 930 931 namespace Y = dr373::X; // expected-error {{no namespace named 'X' in 'dr373::dr373'}} 932 k = Y::dr373; 933 } 934 }; 935 } 936 937 namespace dr374 { // dr374: yes c++11 938 namespace N { 939 template<typename T> void f(); 940 template<typename T> struct A { void f(); }; 941 } 942 template<> void N::f<char>() {} 943 template<> void N::A<char>::f() {} 944 template<> struct N::A<int> {}; 945 #if __cplusplus < 201103L 946 // expected-error@-4 {{extension}} expected-note@-7 {{here}} 947 // expected-error@-4 {{extension}} expected-note@-7 {{here}} 948 // expected-error@-4 {{extension}} expected-note@-8 {{here}} 949 #endif 950 } 951 952 // dr375: dup 345 953 // dr376: na 954 955 namespace dr377 { // dr377: yes 956 enum E { // expected-error {{enumeration values exceed range of largest integer}} 957 a = -__LONG_LONG_MAX__ - 1, // expected-error 0-1{{extension}} 958 b = 2 * (unsigned long long)__LONG_LONG_MAX__ // expected-error 0-2{{extension}} 959 }; 960 } 961 962 // dr378: dup 276 963 // dr379: na 964 965 namespace dr381 { // dr381: yes 966 struct A { 967 int a; 968 }; 969 struct B : virtual A {}; 970 struct C : B {}; 971 struct D : B {}; 972 struct E : public C, public D {}; 973 struct F : public A {}; 974 void f() { 975 E e; 976 e.B::a = 0; // expected-error {{ambiguous conversion}} 977 F f; 978 f.A::a = 1; 979 } 980 } 981 982 namespace dr382 { // dr382: yes c++11 983 // FIXME: Should we allow this in C++98 mode? 984 struct A { typedef int T; }; 985 typename A::T t; 986 typename dr382::A a; 987 #if __cplusplus < 201103L 988 // expected-error@-3 {{occurs outside of a template}} 989 // expected-error@-3 {{occurs outside of a template}} 990 #endif 991 typename A b; // expected-error {{expected a qualified name}} 992 } 993 994 namespace dr383 { // dr383: yes 995 struct A { A &operator=(const A&); }; 996 struct B { ~B(); }; 997 union C { C &operator=(const C&); }; 998 union D { ~D(); }; 999 int check[(__is_pod(A) || __is_pod(B) || __is_pod(C) || __is_pod(D)) ? -1 : 1]; 1000 } 1001 1002 namespace dr384 { // dr384: yes 1003 namespace N1 { 1004 template<typename T> struct Base {}; 1005 template<typename T> struct X { 1006 struct Y : public Base<T> { 1007 Y operator+(int) const; 1008 }; 1009 Y f(unsigned i) { return Y() + i; } 1010 }; 1011 } 1012 1013 namespace N2 { 1014 struct Z {}; 1015 template<typename T> int *operator+(T, unsigned); 1016 } 1017 1018 int main() { 1019 N1::X<N2::Z> v; 1020 v.f(0); 1021 } 1022 } 1023 1024 namespace dr385 { // dr385: yes 1025 struct A { protected: void f(); }; 1026 struct B : A { using A::f; }; 1027 struct C : A { void g(B b) { b.f(); } }; 1028 void h(B b) { b.f(); } 1029 1030 struct D { int n; }; // expected-note {{member}} 1031 struct E : protected D {}; // expected-note 2{{protected}} 1032 struct F : E { friend int i(E); }; 1033 int i(E e) { return e.n; } // expected-error {{protected base}} expected-error {{protected member}} 1034 } 1035 1036 namespace dr387 { // dr387: yes 1037 namespace old { 1038 template<typename T> class number { 1039 number(int); // expected-note 2{{here}} 1040 friend number gcd(number &x, number &y) {} 1041 }; 1042 1043 void g() { 1044 number<double> a(3), b(4); // expected-error 2{{private}} 1045 a = gcd(a, b); 1046 b = gcd(3, 4); // expected-error {{undeclared}} 1047 } 1048 } 1049 1050 namespace newer { 1051 template <typename T> class number { 1052 public: 1053 number(int); 1054 friend number gcd(number x, number y) { return 0; } 1055 }; 1056 1057 void g() { 1058 number<double> a(3), b(4); 1059 a = gcd(a, b); 1060 b = gcd(3, 4); // expected-error {{undeclared}} 1061 } 1062 } 1063 } 1064 1065 // FIXME: dr388 needs codegen test 1066 1067 namespace dr389 { // dr389: no 1068 struct S { 1069 typedef struct {} A; 1070 typedef enum {} B; 1071 typedef struct {} const C; // expected-note 0-2{{here}} 1072 typedef enum {} const D; // expected-note 0-1{{here}} 1073 }; 1074 template<typename> struct T {}; 1075 1076 struct WithLinkage1 {}; 1077 enum WithLinkage2 {}; 1078 typedef struct {} *WithLinkage3a, WithLinkage3b; 1079 typedef enum {} WithLinkage4a, *WithLinkage4b; 1080 typedef S::A WithLinkage5; 1081 typedef const S::B WithLinkage6; 1082 typedef int WithLinkage7; 1083 typedef void (*WithLinkage8)(WithLinkage2 WithLinkage1::*, WithLinkage5 *); 1084 typedef T<WithLinkage5> WithLinkage9; 1085 1086 typedef struct {} *WithoutLinkage1; // expected-note 0-1{{here}} 1087 typedef enum {} const WithoutLinkage2; // expected-note 0-1{{here}} 1088 // These two types don't have linkage even though they are externally visible 1089 // and the ODR requires them to be merged across TUs. 1090 typedef S::C WithoutLinkage3; 1091 typedef S::D WithoutLinkage4; 1092 typedef void (*WithoutLinkage5)(int (WithoutLinkage3::*)(char)); 1093 1094 #if __cplusplus >= 201103L 1095 // This has linkage even though its template argument does not. 1096 // FIXME: This is probably a defect. 1097 typedef T<WithoutLinkage1> WithLinkage10; 1098 #else 1099 typedef int WithLinkage10; // dummy 1100 1101 typedef T<WithLinkage1> GoodArg1; 1102 typedef T<WithLinkage2> GoodArg2; 1103 typedef T<WithLinkage3a> GoodArg3a; 1104 typedef T<WithLinkage3b> GoodArg3b; 1105 typedef T<WithLinkage4a> GoodArg4a; 1106 typedef T<WithLinkage4b> GoodArg4b; 1107 typedef T<WithLinkage5> GoodArg5; 1108 typedef T<WithLinkage6> GoodArg6; 1109 typedef T<WithLinkage7> GoodArg7; 1110 typedef T<WithLinkage8> GoodArg8; 1111 typedef T<WithLinkage9> GoodArg9; 1112 1113 typedef T<WithoutLinkage1> BadArg1; // expected-error{{template argument uses}} 1114 typedef T<WithoutLinkage2> BadArg2; // expected-error{{template argument uses}} 1115 typedef T<WithoutLinkage3> BadArg3; // expected-error{{template argument uses}} 1116 typedef T<WithoutLinkage4> BadArg4; // expected-error{{template argument uses}} 1117 typedef T<WithoutLinkage5> BadArg5; // expected-error{{template argument uses}} 1118 #endif 1119 1120 extern WithLinkage1 withLinkage1; 1121 extern WithLinkage2 withLinkage2; 1122 extern WithLinkage3a withLinkage3a; 1123 extern WithLinkage3b withLinkage3b; 1124 extern WithLinkage4a withLinkage4a; 1125 extern WithLinkage4b withLinkage4b; 1126 extern WithLinkage5 withLinkage5; 1127 extern WithLinkage6 withLinkage6; 1128 extern WithLinkage7 withLinkage7; 1129 extern WithLinkage8 withLinkage8; 1130 extern WithLinkage9 withLinkage9; 1131 extern WithLinkage10 withLinkage10; 1132 1133 // FIXME: These are all ill-formed. 1134 extern WithoutLinkage1 withoutLinkage1; 1135 extern WithoutLinkage2 withoutLinkage2; 1136 extern WithoutLinkage3 withoutLinkage3; 1137 extern WithoutLinkage4 withoutLinkage4; 1138 extern WithoutLinkage5 withoutLinkage5; 1139 1140 // OK, extern "C". 1141 extern "C" { 1142 extern WithoutLinkage1 dr389_withoutLinkage1; 1143 extern WithoutLinkage2 dr389_withoutLinkage2; 1144 extern WithoutLinkage3 dr389_withoutLinkage3; 1145 extern WithoutLinkage4 dr389_withoutLinkage4; 1146 extern WithoutLinkage5 dr389_withoutLinkage5; 1147 } 1148 1149 // OK, defined. 1150 WithoutLinkage1 withoutLinkageDef1; 1151 WithoutLinkage2 withoutLinkageDef2 = WithoutLinkage2(); 1152 WithoutLinkage3 withoutLinkageDef3 = {}; 1153 WithoutLinkage4 withoutLinkageDef4 = WithoutLinkage4(); 1154 WithoutLinkage5 withoutLinkageDef5; 1155 1156 void use(const void *); 1157 void use_all() { 1158 use(&withLinkage1); use(&withLinkage2); use(&withLinkage3a); use(&withLinkage3b); 1159 use(&withLinkage4a); use(&withLinkage4b); use(&withLinkage5); use(&withLinkage6); 1160 use(&withLinkage7); use(&withLinkage8); use(&withLinkage9); use(&withLinkage10); 1161 1162 use(&withoutLinkage1); use(&withoutLinkage2); use(&withoutLinkage3); 1163 use(&withoutLinkage4); use(&withoutLinkage5); 1164 1165 use(&dr389_withoutLinkage1); use(&dr389_withoutLinkage2); 1166 use(&dr389_withoutLinkage3); use(&dr389_withoutLinkage4); 1167 use(&dr389_withoutLinkage5); 1168 1169 use(&withoutLinkageDef1); use(&withoutLinkageDef2); use(&withoutLinkageDef3); 1170 use(&withoutLinkageDef4); use(&withoutLinkageDef5); 1171 } 1172 1173 void local() { 1174 // FIXME: This is ill-formed. 1175 extern WithoutLinkage1 withoutLinkageLocal; 1176 } 1177 } 1178 1179 namespace dr390 { // dr390: yes 1180 template<typename T> 1181 struct A { 1182 A() { f(); } // expected-warning {{call to pure virt}} 1183 virtual void f() = 0; // expected-note {{here}} 1184 virtual ~A() = 0; 1185 }; 1186 template<typename T> A<T>::~A() { T::error; } // expected-error {{cannot be used prior to}} 1187 template<typename T> void A<T>::f() { T::error; } // ok, not odr-used 1188 struct B : A<int> { // expected-note 2{{in instantiation of}} 1189 void f() {} 1190 } b; 1191 } 1192 1193 namespace dr391 { // dr391: yes c++11 1194 // FIXME: Should this apply to C++98 too? 1195 class A { A(const A&); }; // expected-note 0-1{{here}} 1196 A fa(); 1197 const A &a = fa(); 1198 #if __cplusplus < 201103L 1199 // expected-error@-2 {{C++98 requires an accessible copy constructor}} 1200 #endif 1201 1202 struct B { B(const B&) = delete; }; // expected-error 0-1{{extension}} expected-note 0-1{{here}} 1203 B fb(); 1204 const B &b = fb(); 1205 #if __cplusplus < 201103L 1206 // expected-error@-2 {{deleted}} 1207 #endif 1208 1209 template<typename T> 1210 struct C { 1211 C(const C&) { T::error; } 1212 }; 1213 C<int> fc(); 1214 const C<int> &c = fc(); 1215 } 1216 1217 // dr392 FIXME write codegen test 1218 // dr394: na 1219 1220 namespace dr395 { // dr395: yes 1221 struct S { 1222 template <typename T, int N>(&operator T())[N]; // expected-error {{cannot specify any part of a return type}} 1223 template <typename T, int N> operator(T (&)[N])(); // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error +{{}} 1224 template <typename T> operator T *() const { return 0; } 1225 template <typename T, typename U> operator T U::*() const { return 0; } 1226 template <typename T, typename U> operator T (U::*)()() const { return 0; } // expected-error +{{}} 1227 }; 1228 1229 struct null1_t { 1230 template <class T, class U> struct ptr_mem_fun_t { 1231 typedef T (U::*type)(); 1232 }; 1233 1234 template <class T, class U> 1235 operator typename ptr_mem_fun_t<T, U>::type() const { // expected-note {{couldn't infer}} 1236 return 0; 1237 } 1238 } null1; 1239 int (S::*p)() = null1; // expected-error {{no viable conversion}} 1240 1241 template <typename T> using id = T; // expected-error 0-1{{extension}} 1242 1243 struct T { 1244 template <typename T, int N> operator id<T[N]> &(); 1245 template <typename T, typename U> operator id<T (U::*)()>() const; 1246 }; 1247 1248 struct null2_t { 1249 template<class T, class U> using ptr_mem_fun_t = T (U::*)(); // expected-error 0-1{{extension}} 1250 template<class T, class U> operator ptr_mem_fun_t<T, U>() const { return 0; }; 1251 } null2; 1252 int (S::*q)() = null2; 1253 } 1254 1255 namespace dr396 { // dr396: yes 1256 void f() { 1257 auto int a(); // expected-error {{storage class on function}} 1258 int (i); // expected-note {{previous}} 1259 auto int (i); // expected-error {{redefinition}} 1260 #if __cplusplus >= 201103L 1261 // expected-error@-4 {{'auto' storage class}} expected-error@-2 {{'auto' storage class}} 1262 #endif 1263 } 1264 } 1265 1266 // dr397: sup 1823 1267 1268 namespace dr398 { // dr398: yes 1269 namespace example1 { 1270 struct S { 1271 static int const I = 42; 1272 }; 1273 template <int N> struct X {}; 1274 template <typename T> void f(X<T::I> *) {} 1275 template <typename T> void f(X<T::J> *) {} 1276 void foo() { f<S>(0); } 1277 } 1278 1279 namespace example2 { 1280 template <int I> struct X {}; 1281 template <template <class T> class> struct Z {}; 1282 template <class T> void f(typename T::Y *) {} // expected-note 2{{substitution failure}} 1283 template <class T> void g(X<T::N> *) {} // expected-note {{substitution failure}} 1284 template <class T> void h(Z<T::template TT> *) {} // expected-note {{substitution failure}} 1285 struct A {}; 1286 struct B { 1287 int Y; 1288 }; 1289 struct C { 1290 typedef int N; 1291 }; 1292 struct D { 1293 typedef int TT; 1294 }; 1295 1296 void test() { 1297 f<A>(0); // expected-error {{no matching function}} 1298 f<B>(0); // expected-error {{no matching function}} 1299 g<C>(0); // expected-error {{no matching function}} 1300 h<D>(0); // expected-error {{no matching function}} 1301 } 1302 } 1303 } 1304