| // PR c++/25811 |
| // { dg-do compile } |
| |
| struct A1 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| int const j; // { dg-message "should be initialized" } |
| }; |
| |
| struct A2 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| int const volatile i; // { dg-message "should be initialized" } |
| }; |
| |
| struct A3 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| int& ref; // { dg-message "should be initialized" } |
| }; |
| |
| struct A4 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| int const& ref; // { dg-message "should be initialized" } |
| }; |
| |
| struct A5 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| int& ref; // { dg-message "should be initialized" } |
| int const i; // { dg-message "should be initialized" } |
| }; |
| |
| template <class T> struct S1 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| T const i; // { dg-message "should be initialized" } |
| }; |
| |
| template <class T> struct S2 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| T const volatile i; // { dg-message "should be initialized" } |
| }; |
| |
| template <class T> struct S3 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| T& ref; // { dg-message "should be initialized" } |
| }; |
| |
| template <class T> struct S4 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| T const i; // { dg-message "should be initialized" } |
| T& ref; // { dg-message "should be initialized" } |
| }; |
| |
| struct X |
| { |
| X () : c (0), r (c) {} |
| int const c; |
| int const& r; |
| }; |
| |
| struct Y11 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| int const i; // { dg-message "should be initialized" } |
| }; |
| |
| struct Y1 // { dg-error "deleted" "" { target c++11 } } |
| { |
| Y11 a[1]; |
| }; |
| |
| struct Y22 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| int& ref; // { dg-message "should be initialized" } |
| }; |
| |
| struct Y2 // { dg-error "deleted" "" { target c++11 } } |
| { |
| Y22 a[1]; |
| }; |
| |
| struct Z1 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| int const i; // { dg-message "should be initialized" } |
| }; |
| |
| struct Z2 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| int& ref; // { dg-message "should be initialized" } |
| }; |
| |
| struct Z3 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| int const i; // { dg-message "should be initialized" } |
| }; |
| |
| struct Z4 // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| int& ref; // { dg-message "should be initialized" } |
| }; |
| |
| struct Z5 |
| { |
| int i; |
| }; |
| |
| struct Z // { dg-error "deleted" "" { target c++11 } } |
| { |
| Z1 z1; |
| Z2 z2; |
| Z3 z3; |
| Z4 z4; |
| Z5 z5; |
| }; |
| |
| union U // { dg-message "implicitly deleted" "" { target c++11 } } |
| // { dg-error "uninitialized" "" { target c++11 } .-1 } |
| { |
| int const i; // { dg-message "should be initialized" } |
| }; |
| |
| void f1 () |
| { |
| new A1; // { dg-error "deleted|uninitialized const member" } |
| } |
| |
| void f2 () |
| { |
| new A2; // { dg-error "deleted|uninitialized const member" } |
| } |
| |
| void f3 () |
| { |
| new A3; // { dg-error "deleted|uninitialized reference member" } |
| } |
| |
| void f4 () |
| { |
| new A4; // { dg-error "deleted|uninitialized reference member" } |
| } |
| |
| void f5 () |
| { |
| new A5; // { dg-error "deleted|uninitialized reference member|uninitialized const member" } |
| } |
| |
| void f6 () |
| { |
| new S1<int>; // { dg-error "deleted|uninitialized const member" } |
| } |
| |
| void f7 () |
| { |
| new S2<int>; // { dg-error "deleted|uninitialized const member" } |
| } |
| |
| void f8 () |
| { |
| new S3<int>; // { dg-error "deleted|uninitialized reference member" } |
| } |
| |
| void f9 () |
| { |
| new S4<int>; // { dg-error "deleted|uninitialized reference member|uninitialized const member" } |
| } |
| |
| void f10 () |
| { |
| new X; |
| } |
| |
| void f11 () |
| { |
| new A1[1]; // { dg-error "deleted|uninitialized const member" } |
| } |
| |
| void f12 () |
| { |
| new A3[1]; // { dg-error "deleted|uninitialized reference member" } |
| } |
| |
| void f13 () |
| { |
| new Y1; // { dg-error "deleted|uninitialized const member" } |
| } |
| |
| void f14 () |
| { |
| new Y2; // { dg-error "deleted|uninitialized reference member" } |
| } |
| |
| void f15 () |
| { |
| new Z; // { dg-error "deleted|uninitialized reference member|uninitialized const member" } |
| } |
| |
| void f16 () |
| { |
| new U; // { dg-error "deleted|uninitialized const member" } |
| } |