brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 9717fbf Raw
71 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify=expected,cxx11 %s2// RUN: %clang_cc1 -fsyntax-only -std=c++14 -verify=expected,since-cxx14 %s3 4struct A {5  template<typename T>6  void f0();7 8  template<>9  constexpr void f0<short>(); // cxx11-error {{conflicting types for 'f0'}}10                              // cxx11-note@-1 {{previous declaration is here}}11                              // cxx11-warning@-2 {{'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const'}}12 13  template<typename T>14  void f1() const; // since-cxx14-note 2{{candidate template ignored: could not match 'void () const' against 'void ()'}}15 16  template<>17  constexpr void f1<short>(); // since-cxx14-error {{no function template matches function template specialization 'f1'}}18                              // cxx11-warning@-1 {{'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const'}}19};20 21template<>22constexpr void A::f0<long>(); // cxx11-error {{conflicting types for 'f0'}}23                              // cxx11-note@-1 {{previous declaration is here}}24                              // cxx11-warning@-2 {{'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const'}}25 26template<>27constexpr void A::f1<long>(); // since-cxx14-error {{no function template matches function template specialization 'f1'}}28                              // cxx11-warning@-1 {{'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const'}}29 30// FIXME: It's unclear whether [temp.expl.spec]p12 is intended to apply to31// members of a class template explicitly specialized for an implicitly32// instantiated specialization of that template.33template<typename T>34struct B { // #defined-here35  void g0(); // since-cxx14-note {{previous declaration is here}}36             // cxx11-note@-1 {{member declaration does not match because it is not const qualified}}37 38  void g1() const; // since-cxx14-note {{member declaration does not match because it is const qualified}}39                   // cxx11-note@-1 {{previous declaration is here}}40 41  template<typename U>42  void h0(); // since-cxx14-note {{previous declaration is here}}43 44  template<typename U>45  void h1() const; // cxx11-note {{previous declaration is here}}46};47 48template<>49constexpr void B<short>::g0(); // since-cxx14-error {{constexpr declaration of 'g0' follows non-constexpr declaration}}50                               // cxx11-error@-1 {{out-of-line declaration of 'g0' does not match any declaration in 'B<short>'}}51                               // cxx11-warning@-2 {{'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const'}}52                               // expected-note@#defined-here {{defined here}}53 54template<>55constexpr void B<short>::g1(); // since-cxx14-error {{out-of-line declaration of 'g1' does not match any declaration in 'B<short>'}}56                               // cxx11-error@-1 {{constexpr declaration of 'g1' follows non-constexpr declaration}}57                               // cxx11-warning@-2 {{'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const'}}58                               // expected-note@#defined-here {{defined here}}59 60template<>61template<typename U>62constexpr void B<long>::h0(); // since-cxx14-error {{constexpr declaration of 'h0' follows non-constexpr declaration}}63                              // cxx11-error@-1 {{out-of-line declaration of 'h0' does not match any declaration in 'B<long>'}}64                              // cxx11-warning@-2 {{'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const'}}65 66template<>67template<typename U>68constexpr void B<long>::h1(); // since-cxx14-error {{out-of-line declaration of 'h1' does not match any declaration in 'B<long>'}}69                              // cxx11-error@-1 {{constexpr declaration of 'h1' follows non-constexpr declaration}}70                              // cxx11-warning@-2 {{'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const'}}71