// 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 struct X { }; struct S { S(X); S(std::initializer_list); int m; }; struct T { T(X); int m; }; struct W { W(); W(std::initializer_list); 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) S a{X()} -> (std::initializer_list) */ 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 } }