dr1xx.cpp revision cb82c8975fccdd0ae97c70c24e860d1383d81fd0
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RUN: %clang_cc1 -std=c++98 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RUN: %clang_cc1 -std=c++11 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RUN: %clang_cc1 -std=c++1y %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr100 { // dr100: yes 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<const char *> struct A {}; // expected-note {{declared here}} 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<const char (&)[4]> struct B {}; // expected-note {{declared here}} 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A<"foo"> a; // expected-error {{does not refer to any declaration}} 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) B<"bar"> b; // expected-error {{does not refer to any declaration}} 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr101 { // dr101: yes 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extern "C" void dr101_f(); 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) typedef unsigned size_t; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace X { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extern "C" void dr101_f(); 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef unsigned size_t; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using X::dr101_f; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using X::size_t; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr102 { // dr102: yes 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace A { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> T f(T a, T b) { return a + b; } // expected-error {{neither visible in the template definition nor found by argument-dependent lookup}} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace B { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct S {}; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) B::S operator+(B::S, B::S); // expected-note {{should be declared prior to the call site or in namespace 'dr102::B'}} 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch template B::S A::f(B::S, B::S); // expected-note {{in instantiation of}} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr103: na 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr104 FIXME: add codegen test 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr105: na 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr106 { // dr106: sup 540 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef int &r1; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef r1 &r1; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef const r1 r1; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef const r1 &r1; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef const int &r2; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef r2 &r2; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef const r2 r2; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef const r2 &r2; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr107 { // dr107: yes 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct S {}; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extern "C" S operator+(S, S) { return S(); } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr108 { // dr108: yes 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> struct A { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct B { typedef int X; }; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) B::X x; // expected-error {{missing 'typename'}} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct C : B { X x; }; // expected-error {{unknown type name}} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<> struct A<int>::B { int X; }; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr109 { // dr109: yes 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { template<typename T> void f(T); }; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> struct B : T { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using T::template f; // expected-error {{using declaration can not refer to a template}} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void g() { this->f<int>(123); } // expected-error {{use 'template'}} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr111 { // dr111: dup 535 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { A(); A(volatile A&, int = 0); A(A&, const char * = "foo"); }; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct B : A { B(); }; // expected-note +{{would lose const qualifier}} expected-note {{requires 0 arguments}} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const B b1; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) B b2(b1); // expected-error {{no matching constructor}} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr112 { // dr112: yes 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct T { int n; }; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef T Arr[1]; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const T a1[1] = {}; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volatile T a2[1] = {}; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Arr a3 = {}; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volatile Arr a4 = {}; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<const volatile T*> struct X {}; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) X<a1> x1; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) X<a2> x2; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) X<a3> x3; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) X<a4> x4; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __cplusplus < 201103L 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expected-error@-5 {{internal linkage}} expected-note@-10 {{here}} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expected-error@-4 {{internal linkage}} expected-note@-9 {{here}} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FIXME: Test this somehow. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr113 { // dr113: yes 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extern void (*p)(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void f() { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) no_such_function(); // expected-error {{undeclared}} 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void g(); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void (*p)() = &g; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr114 { // dr114: yes 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void f(int) = 0; // expected-note {{unimplemented}} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct B : A { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> void f(T); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void g() { f(0); } 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } b; // expected-error {{abstract}} 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr115 { // dr115: yes 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> int f(T); // expected-note +{{}} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> int g(T); // expected-note +{{}} 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> int g(T, int); // expected-note +{{}} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int k1 = f(&f); // expected-error {{no match}} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int k2 = f(&f<int>); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int k3 = f(&g<int>); // expected-error {{no match}} 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void h() { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&f; // expected-error {{address of overloaded function 'f' cannot be cast to type 'void'}} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&f<int>; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&g<int>; // expected-error {{address of overloaded function 'g' cannot be cast to type 'void'}} 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &f; // expected-error {{reference to overloaded function could not be resolved}} 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &f<int>; // expected-warning {{unused}} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &g<int>; // expected-error {{reference to overloaded function could not be resolved}} 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct S { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> static int f(T); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> static int g(T); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> static int g(T, int); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } s; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int k4 = f(&s.f); // expected-error {{non-constant pointer to member}} 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int k5 = f(&s.f<int>); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int k6 = f(&s.g<int>); // expected-error {{non-constant pointer to member}} 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void i() { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&s.f; // expected-error {{non-constant pointer to member}} 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&s.f<int>; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&s.g<int>; // expected-error {{non-constant pointer to member}} 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &s.f; // expected-error {{non-constant pointer to member}} 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &s.f<int>; // expected-warning {{unused}} 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &s.g<int>; // expected-error {{non-constant pointer to member}} 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct T { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> int f(T); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> int g(T); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> int g(T, int); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } t; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int k7 = f(&s.f); // expected-error {{non-constant pointer to member}} 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int k8 = f(&s.f<int>); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int k9 = f(&s.g<int>); // expected-error {{non-constant pointer to member}} 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void j() { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&s.f; // expected-error {{non-constant pointer to member}} 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&s.f<int>; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&s.g<int>; // expected-error {{non-constant pointer to member}} 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &s.f; // expected-error {{non-constant pointer to member}} 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &s.f<int>; // expected-warning {{unused}} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &s.g<int>; // expected-error {{non-constant pointer to member}} 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __cplusplus >= 201103L 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Special case kicks in only if a template argument list is specified. 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T=int> void with_default(); // expected-note +{{}} 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int k10 = f(&with_default); // expected-error {{no matching function}} 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int k11 = f(&with_default<>); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void k() { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&with_default; // expected-error {{overloaded function}} 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&with_default<>; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &with_default; // expected-error {{overloaded function}} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &with_default<>; // expected-warning {{unused}} 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr116 { // dr116: yes 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<int> struct A {}; 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) template<int N> void f(A<N>) {} // expected-note {{previous}} 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) template<int M> void f(A<M>) {} // expected-error {{redefinition}} 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> void f(A<sizeof(T)>) {} // expected-note {{previous}} 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename U> void f(A<sizeof(U)>) {} // expected-error {{redefinition}} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr117: na 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr118 FIXME: add codegen test 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr119: na 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr120: na 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr121 { // dr121: yes 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct X { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> struct Y {}; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> struct Z { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) X::Y<T> x; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) T::Y<T> y; // expected-error +{{}} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Z<X> z; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr122 { // dr122: yes 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> void f(); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void g() { f<int>(); } 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr123: na 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr124: dup 201 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr125: yes 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct dr125_A { struct dr125_B {}; }; // expected-note {{here}} 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)dr125_A::dr125_B dr125_C(); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr125_B { dr125_A dr125_C(); } 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr125 { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct X { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend dr125_A::dr125_B (::dr125_C)(); // ok 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend dr125_A (::dr125_B::dr125_C)(); // ok 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend dr125_A::dr125_B::dr125_C(); // expected-error {{did you mean the constructor name 'dr125_B'?}} 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expected-warning@-1 {{missing exception specification}} 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __cplusplus >= 201103L 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expected-error@-3 {{follows constexpr declaration}} expected-note@-10 {{here}} 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr126 { // dr126: no 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct C {}; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct D : C {}; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct E : private C { friend class A; friend class B; }; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct F : protected C {}; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct G : C {}; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct H : D, G {}; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void cp() throw(C*); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void dp() throw(C*); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ep() throw(C*); // expected-note {{overridden}} 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void fp() throw(C*); // expected-note {{overridden}} 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void gp() throw(C*); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void hp() throw(C*); // expected-note {{overridden}} 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void cr() throw(C&); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void dr() throw(C&); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void er() throw(C&); // expected-note {{overridden}} 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void fr() throw(C&); // expected-note {{overridden}} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void gr() throw(C&); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void hr() throw(C&); // expected-note {{overridden}} 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void pv() throw(void*); // expected-note {{overridden}} 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __cplusplus >= 201103L 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void np() throw(C*); // expected-note {{overridden}} 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void npm() throw(int C::*); // expected-note {{overridden}} 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void nr() throw(C&); // expected-note {{overridden}} 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ref1() throw(C *const&); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ref2() throw(C *); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void v() throw(int); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void w() throw(const int); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void x() throw(int*); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void y() throw(const int*); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void z() throw(int); // expected-note {{overridden}} 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct B : A { 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void cp() throw(C*); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void dp() throw(D*); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ep() throw(E*); // expected-error {{more lax}} 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void fp() throw(F*); // expected-error {{more lax}} 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void gp() throw(G*); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void hp() throw(H*); // expected-error {{more lax}} 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void cr() throw(C&); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void dr() throw(D&); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void er() throw(E&); // expected-error {{more lax}} 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void fr() throw(F&); // expected-error {{more lax}} 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void gr() throw(G&); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void hr() throw(H&); // expected-error {{more lax}} 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void pv() throw(C*); // expected-error {{more lax}} FIXME: This is valid. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __cplusplus >= 201103L 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using nullptr_t = decltype(nullptr); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void np() throw(nullptr_t*); // expected-error {{more lax}} FIXME: This is valid. 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void npm() throw(nullptr_t*); // expected-error {{more lax}} FIXME: This is valid. 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void nr() throw(nullptr_t&); // expected-error {{more lax}} This is not. 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ref1() throw(D *const &); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ref2() throw(D *); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void v() throw(const int); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void w() throw(int); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void x() throw(const int*); // FIXME: 'const int*' is not allowed by A::h. 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void y() throw(int*); // ok 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void z() throw(long); // expected-error {{more lax}} 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr127 { // dr127: yes 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __extension__ typedef __decltype(sizeof(0)) size_t; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> struct A { 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A() throw(int); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *operator new(size_t, const char * = 0); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void operator delete(void *, const char *) { T::error; } // expected-error 2{{no members}} 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void operator delete(void *) { T::error; } 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A<void> *p = new A<void>; // expected-note {{instantiat}} 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A<int> *q = new ("") A<int>; // expected-note {{instantiat}} 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr128 { // dr128: yes 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum E1 { e1 } x = e1; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum E2 { e2 } y = static_cast<E2>(x), z = static_cast<E2>(e1); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr129: dup 616 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr130: na 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr131 { // dr131: yes 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *a_with_\u0e8c = "\u0e8c"; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *b_with_\u0e8d = "\u0e8d"; 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *c_with_\u0e8e = "\u0e8e"; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __cplusplus < 201103L 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expected-error@-4 {{expected ';'}} expected-error@-2 {{expected ';'}} 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr132 { // dr132: no 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void f() { 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extern struct {} x; // ok 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extern struct S {} y; // FIXME: This is invalid. 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static enum { E } e; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr133: dup 87 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr134: na 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr135 { // dr135: yes 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A f(A a) { return a; } 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend A g(A a) { return a; } 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static A h(A a) { return a; } 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr136 { // dr136: 3.4 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void f(int, int, int = 0); // expected-note {{previous declaration is here}} 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void g(int, int, int); // expected-note {{previous declaration is here}} 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { 3689ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch friend void f(int, int = 0, int); // expected-error {{friend declaration specifying a default argument must be the only declaration}} 3699ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch friend void g(int, int, int = 0); // expected-error {{friend declaration specifying a default argument must be the only declaration}} 3709ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch friend void h(int, int, int = 0); // expected-error {{friend declaration specifying a default argument must be a definition}} 3719ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch friend void i(int, int, int = 0) {} // expected-note {{previous declaration is here}} 3729ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch friend void j(int, int, int = 0) {} 3739ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch operator int(); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void i(int, int, int); // expected-error {{friend declaration specifying a default argument must be the only declaration}} 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void q() { 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) j(A(), A()); // ok, has default argument 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extern "C" void k(int, int, int, int); // expected-note {{previous declaration is here}} 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) namespace NSA { 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend void dr136::k(int, int, int, int = 0); // expected-error {{friend declaration specifying a default argument must be the only declaration}} \ 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expected-note {{previous declaration is here}} 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace NSB { 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend void dr136::k(int, int, int = 0, int); // expected-error {{friend declaration specifying a default argument must be the only declaration}} 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct B { 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void f(int); // expected-note {{previous declaration is here}} 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct C { 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend void B::f(int = 0); // expected-error {{friend declaration specifying a default argument must be the only declaration}} 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr137 { // dr137: yes 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extern void *p; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extern const void *cp; 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extern volatile void *vp; 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extern const volatile void *cvp; 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int *q = static_cast<int*>(p); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *qc = static_cast<int*>(cp); // expected-error {{casts away qualifiers}} 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int *qv = static_cast<int*>(vp); // expected-error {{casts away qualifiers}} 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int *qcv = static_cast<int*>(cvp); // expected-error {{casts away qualifiers}} 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int *cq = static_cast<const int*>(p); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int *cqc = static_cast<const int*>(cp); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int *cqv = static_cast<const int*>(vp); // expected-error {{casts away qualifiers}} 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int *cqcv = static_cast<const int*>(cvp); // expected-error {{casts away qualifiers}} 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const volatile int *cvq = static_cast<const volatile int*>(p); 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const volatile int *cvqc = static_cast<const volatile int*>(cp); 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const volatile int *cvqv = static_cast<const volatile int*>(vp); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const volatile int *cvqcv = static_cast<const volatile int*>(cvp); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr139 { // dr139: yes 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) namespace example1 { 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef int f; // expected-note {{previous}} 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend void f(A &); // expected-error {{different kind of symbol}} 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace example2 { 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef int f; 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace N { 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { 430eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch friend void f(A &); 431eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch operator int(); 432eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void g(A a) { int i = f(a); } // ok, f is typedef not friend function 433eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 434eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 435eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 436eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 437eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 438eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace dr140 { // dr140: yes 439eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void f(int *const) {} // expected-note {{previous}} 440eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void f(int[3]) {} // expected-error {{redefinition}} 441eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void g(const int); 442eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void g(int n) { n = 2; } 443eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 444eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr141 { // dr141: yes 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> void f(); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> struct S { int n; }; 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A : S<int> { 449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) template<typename T> void f(); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> struct S {}; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } a; 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct B : S<int> {} b; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void g() { 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) a.f<int>(); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)a.S<int>::n; // expected-error {{no member named 'n'}} 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __cplusplus < 201103L 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expected-error@-2 {{ambiguous}} 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expected-note@-11 {{lookup from the current scope}} 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expected-note@-9 {{lookup in the object type}} 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) b.f<int>(); // expected-error {{no member}} expected-error +{{}} 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)b.S<int>::n; 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> struct C { 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) T t; 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void g() { 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) t.f<int>(); // expected-error {{use 'template'}} 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void h() { 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)t.S<int>::n; // ok 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void i() { 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)t.S<int>(); // ok! 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void h() { C<B>().h(); } // ok 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct X { 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> void S(); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void i() { C<X>().i(); } // ok!! 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr142 { // dr142: yes 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class B { // expected-note +{{here}} 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int mi; // expected-note +{{here}} 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int si; // expected-note +{{here}} 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class D : private B { // expected-note +{{here}} 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class DD : public D { 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void f(); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DD::f() { 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mi = 3; // expected-error {{private base class}} expected-error {{private member}} 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) si = 3; // expected-error {{private member}} 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) B b_old; // expected-error {{private member}} 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dr142::B b; 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) b.mi = 3; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) b.si = 3; 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) B::si = 3; // expected-error {{private member}} 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dr142::B::si = 3; 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) B *bp1_old = this; // expected-error {{private member}} expected-error {{private base class}} 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dr142::B *bp1 = this; // expected-error {{private base class}} 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) B *bp2_old = (B*)this; // expected-error 2{{private member}} 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dr142::B *bp2 = (dr142::B*)this; 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bp2->mi = 3; 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace dr143 { // dr143: yes 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) namespace A { struct X; } 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) namespace B { void f(A::X); } 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace A { 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct X { friend void B::f(X); }; 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void g(A::X x) { 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f(x); // expected-error {{undeclared identifier 'f'}} 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr145 { // dr145: yes 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void f(bool b) { 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++b; // expected-warning {{deprecated}} 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) b++; // expected-warning {{deprecated}} 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr147 { // dr147: no 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace example1 { 53158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) template<typename> struct A { 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> A(T); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FIXME: This appears to be valid, and EDG and G++ accept. 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<> template<> A<int>::A<int>(int) {} // expected-error {{out-of-line constructor for 'A' cannot have template arguments}} 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace example2 { 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { A(); }; 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct B : A { B(); }; 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A::A a1; // expected-error {{is a constructor}} 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) B::A a2; 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace example3 { 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename> struct A { 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T> A(T); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static A a; 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<> A<int>::A<int>(A<int>::a); // expected-error {{is a constructor}} 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr148 { // dr148: yes 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { int A::*p; }; 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int check1[__is_pod(int(A::*)) ? 1 : -1]; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int check2[__is_pod(A) ? 1 : -1]; 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr149: na 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr151 { // dr151: yes 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct X {}; 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef int X::*p; 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __cplusplus < 201103L 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define fold(x) (__builtin_constant_p(0) ? (x) : (x)) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define fold 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int check[fold(p() == 0) ? 1 : -1]; 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef fold 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr152 { // dr152: yes 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A(); // expected-note {{not viable}} 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit A(const A&); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A a1 = A(); // expected-error {{no matching constructor}} 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A a2((A())); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr153: na 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr154 { // dr154: yes 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) union { int a; }; // expected-error {{must be declared 'static'}} 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace { 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) union { int b; }; 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static union { int c; }; 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr155 { // dr155: dup 632 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct S { int n; } s = { { 1 } }; // expected-warning {{braces around scalar initializer}} 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr159 { // dr159: no 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace X { void f(); } 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void f(); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FIXME: This should be accepted. 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void dr159::f() {} // expected-error {{extra qualification}} 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void dr159::X::f() {} 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr160: na 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr161 { // dr161: yes 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class A { 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct B { int n; } b; // expected-note 2{{here}} 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static B bs; 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void f(); // expected-note {{here}} 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void sf(); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct C : A {}; 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct D : A { 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void g(C c) { 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)b.n; 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) B b1; 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) C::B b2; // ok, accessible as a member of A 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&C::b; // expected-error {{protected}} 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)&C::bs; 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)c.b; // expected-error {{protected}} 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void)c.bs; 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f(); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sf(); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.f(); // expected-error {{protected}} 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.sf(); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A::f(); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) D::f(); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A::sf(); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) C::sf(); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) D::sf(); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr162 { // dr162: no 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) char &f(char); 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static int &f(int); 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void g() { 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int &a = (&A::f)(0); // FIXME: expected-error {{could not be resolved}} 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char &b = (&A::f)('0'); // expected-error {{could not be resolved}} 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int &c = (&A::f)(0); // FIXME: expected-error {{could not be resolved}} 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char &d = (&A::f)('0'); // expected-error {{could not be resolved}} 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dr163: na 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr164 { // dr164: yes 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void f(int); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template <class T> int g(T t) { return f(t); } 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum E { e }; 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int f(E); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int k = g(e); 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dr165 { // dr165: no 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespace N { 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct A { friend struct B; }; 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void f() { void g(); } 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FIXME: dr1477 says this is ok, dr165 says it's ill-formed 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct N::B {}; 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FIXME: dr165 says this is ill-formed, but the argument in dr1477 says it's ok 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void N::g() {} 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)