| // PR c++/42844 |
| // { dg-do compile } |
| |
| struct A |
| { |
| A(){} |
| }; |
| |
| struct B : A { int i; }; // { dg-message "user-provided default constructor" } |
| |
| struct C : A { int i; }; // { dg-message "user-provided default constructor" } |
| |
| struct D : B { D() {} }; |
| |
| struct E { int i; }; // { dg-message "user-provided default constructor" } |
| |
| template <class T> |
| struct F : A { T t; }; // { dg-message "user-provided default constructor" } |
| |
| template <class T> |
| struct G { T t; }; // { dg-message "user-provided default constructor" } |
| |
| void f () |
| { |
| B const b; // { dg-error "uninitialized 'const" } |
| extern B const bext; |
| |
| C const c[ 1 ]; // { dg-error "uninitialized 'const" } |
| extern C const cext[ 1 ]; |
| |
| D const d; |
| extern D const dext; |
| |
| E const e; // { dg-error "uninitialized 'const" } |
| extern E const eext; |
| |
| F<int> const f; // { dg-error "uninitialized 'const" } |
| extern F<int> const fext; |
| |
| G<int> const g; // { dg-error "uninitialized 'const" } |
| extern G<int> const gext; |
| } |
| |
| struct H { int i; }; // { dg-message "user-provided default constructor" } |
| |
| struct I : A { int i; }; // { dg-message "user-provided default constructor" } |
| |
| template <class T> |
| void g () |
| { |
| T const t; // { dg-error "uninitialized 'const" } |
| extern T const text; // { dg-error "conflicting declaration" } |
| } |
| |
| template void g<H> (); |
| template void g<I> (); |