| // Test for narrowing diagnostics |
| // { dg-do compile { target c++11 } } |
| |
| #include <initializer_list> |
| |
| struct A { int i; int j; }; |
| A a2 { 1.2 }; // { dg-error "narrowing" } |
| A a1 { 1, 2 }; // aggregate initialization |
| struct B { |
| B(std::initializer_list<int>); |
| }; |
| B b1 { 1, 2 }; // creates initializer_list<int> and calls constructor |
| B b2 { 1, 2.0 }; // { dg-error "narrowing" } |
| struct C { |
| C(int i, double j); |
| }; |
| C c1 = { 1, 2.2 }; // calls constructor with arguments (1, 2.2) |
| C c2 = { 1.1, 2 }; // { dg-error "narrowing" } |
| |
| int j { 1 }; // initialize to 1 |
| int k {}; // initialize to 0 |
| |
| // PR c++/36963 |
| double d = 1.1; |
| float fa[] = { d, 1.1 }; // { dg-error "narrowing conversion of 'd'" } |
| constexpr double d2 = 1.1; |
| float fa2[] = { d2, 1.1 }; |
| |
| // PR c++/49577 |
| unsigned u{ -1 }; // { dg-error "narrowing" } |
| char c = char{ u }; // { dg-error "narrowing" } |
| |
| // PR c++/50011 |
| short unsigned su; |
| int i { su }; // { dg-error "narrowing" "" { target short_eq_int } } |