// RUN: %clang_cc1 %s -std=c++11 -Wignored-base-class-qualifiers -verify // RUN: %clang_cc1 %s -std=c++11 -Wno-ignored-qualifiers -verify=good // good-no-diagnostics template struct add_const { using type = const T; }; template using add_const_t = typename add_const::type; class A { }; typedef const A A_Const; class B : public A_Const { }; // expected-warning {{'const' qualifier on base class type 'A_Const' (aka 'const A') has no effect}} \ // expected-note {{base class 'A_Const' (aka 'const A') specified here}} typedef const volatile A A_Const_Volatile; class C : public A_Const_Volatile { }; // expected-warning {{'const volatile' qualifiers on base class type 'A_Const_Volatile' (aka 'const volatile A') have no effect}} \ // expected-note {{base class 'A_Const_Volatile' (aka 'const volatile A') specified here}} struct D { D(int); }; template struct E : T { // expected-warning {{'const' qualifier on base class type 'const D' has no effect}} \ // expected-note {{base class 'const D' specified here}} using T::T; E(int &) : E(0) {} }; E e(1); // expected-note {{in instantiation of template class 'E' requested here}} template struct G : add_const::type { // expected-warning {{'const' qualifier on base class type 'add_const::type' (aka 'const D') has no effect}} \ // expected-note {{base class 'add_const::type' (aka 'const D') specified here}} using T::T; G(int &) : G(0) {} }; G g(1); // expected-note {{in instantiation of template class 'G' requested here}}