| // PR c++/25814 |
| // { dg-do compile { target c++11 } } |
| // { dg-additional-options "-fdiagnostics-show-caret" } |
| // Test -Wvexing-parse's fix-it hints in C++11. |
| |
| #include <initializer_list> |
| |
| struct X { }; |
| |
| struct S { |
| S(X); |
| S(std::initializer_list<X>); |
| int m; |
| }; |
| |
| struct T { |
| T(X); |
| int m; |
| }; |
| |
| struct W { |
| W(); |
| W(std::initializer_list<X>); |
| int m; |
| }; |
| |
| struct U { |
| U(); |
| int m; |
| }; |
| |
| int |
| main () |
| { |
| /* |
| Careful what we're suggesting: |
| S a((X())) -> S(X) |
| S a({X()}) -> (std::initializer_list<X>) |
| S a{X()} -> (std::initializer_list<X>) |
| */ |
| S a(X()); // { dg-warning "6:parentheses were disambiguated as a function declaration" } |
| /* { dg-begin-multiline-output "" } |
| S a(X()); |
| ^~~~~ |
| { dg-end-multiline-output "" } */ |
| // { dg-message "6:add parentheses to declare a variable" "" { target *-*-* } 41 } |
| /* { dg-begin-multiline-output "" } |
| S a(X()); |
| ^~~~~ |
| ( ) |
| { dg-end-multiline-output "" } */ |
| |
| T t(X()); // { dg-warning "6:parentheses were disambiguated as a function declaration" } |
| /* { dg-begin-multiline-output "" } |
| T t(X()); |
| ^~~~~ |
| { dg-end-multiline-output "" } */ |
| // { dg-message "6:replace parentheses with braces to declare a variable" "" { target *-*-* } 53 } |
| /* { dg-begin-multiline-output "" } |
| T t(X()); |
| ^~~~~ |
| - |
| { - |
| } |
| { dg-end-multiline-output "" } */ |
| |
| int n( ); // { dg-warning "8:empty parentheses were disambiguated as a function declaration" } |
| /* { dg-begin-multiline-output "" } |
| int n( ); |
| ^~~~~ |
| { dg-end-multiline-output "" } */ |
| // { dg-message "8:remove parentheses to default-initialize a variable" "" { target *-*-* } 67 } |
| /* { dg-begin-multiline-output "" } |
| int n( ); |
| ^~~~~ |
| ----- |
| { dg-end-multiline-output "" } */ |
| // { dg-message "8:or replace parentheses with braces to value-initialize a variable" "" { target *-*-* } 67 } |
| |
| S s(); // { dg-warning "6:empty parentheses were disambiguated as a function declaration" } |
| /* { dg-begin-multiline-output "" } |
| S s(); |
| ^~ |
| { dg-end-multiline-output "" } */ |
| |
| X x(); // { dg-warning "6:empty parentheses were disambiguated as a function declaration" } |
| /* { dg-begin-multiline-output "" } |
| X x(); |
| ^~ |
| { dg-end-multiline-output "" } */ |
| // { dg-message "6:remove parentheses to default-initialize a variable" "" { target *-*-* } 86 } |
| /* { dg-begin-multiline-output "" } |
| X x(); |
| ^~ |
| -- |
| { dg-end-multiline-output "" } */ |
| // { dg-message "6:or replace parentheses with braces to aggregate-initialize a variable" "" { target *-*-* } 86 } |
| |
| W w(); // { dg-warning "6:empty parentheses were disambiguated as a function declaration" } |
| /* { dg-begin-multiline-output "" } |
| W w(); |
| ^~ |
| { dg-end-multiline-output "" } */ |
| // { dg-message "6:remove parentheses to default-initialize a variable" "" { target *-*-* } 99 } |
| /* { dg-begin-multiline-output "" } |
| W w(); |
| ^~ |
| -- |
| { dg-end-multiline-output "" } */ |
| |
| T t2(); // { dg-warning "7:empty parentheses were disambiguated as a function declaration" } |
| /* { dg-begin-multiline-output "" } |
| T t2(); |
| ^~ |
| { dg-end-multiline-output "" } */ |
| |
| U u(); // { dg-warning "6:empty parentheses were disambiguated as a function declaration" } |
| /* { dg-begin-multiline-output "" } |
| U u(); |
| ^~ |
| { dg-end-multiline-output "" } */ |
| // { dg-message "6:remove parentheses to default-initialize a variable" "" { target *-*-* } 117 } |
| /* { dg-begin-multiline-output "" } |
| U u(); |
| ^~ |
| -- |
| { dg-end-multiline-output "" } */ |
| // { dg-message "6:or replace parentheses with braces to value-initialize a variable" "" { target *-*-* } 117 } |
| } |