| // Koenig lookup is not defined as intended in the std. DR 218 gives |
| // an indication of what is meant. This test case encapsulates the |
| // current conservative behavior |
| |
| // Copyright (C) 2006 Free Software Foundation, Inc. |
| // Contributed by Nathan Sidwell 27 Aug 2006 <nathan@codesourcery.com> |
| |
| namespace N |
| { |
| struct A {}; |
| void One (...); // { dg-message "N::One" } |
| void (*Two) (...); // { dg-message "N::Two" } |
| namespace Three {} // { dg-message "N::Three" } |
| } |
| |
| namespace M |
| { |
| struct B {}; |
| struct One {}; // { dg-message "M::One" } |
| void (*Two) (...); // { dg-message "M::Two" } |
| void Three (...); // { dg-message "M::Three" } |
| } |
| |
| namespace O |
| { |
| struct C {}; |
| void Two (...); // { dg-message "O::Two" } |
| } |
| |
| void g (N::A *a, M::B *b, O::C *c) |
| { |
| One (a); // ok |
| One (a, b); // ok |
| One (b); // { dg-error "3:'One' was not declared" } |
| // { dg-message "suggested alternatives" "suggested alternative for One" { target *-*-* } .-1 } |
| |
| Two (c); // ok |
| Two (a, c); // ok |
| Two (a); // { dg-error "3:'Two' was not declared" } |
| // { dg-message "suggested alternatives" "suggested alternative for Two" { target *-*-* } .-1 } |
| Two (a, a); // error masked by earlier error |
| Two (b); // error masked by earlier error |
| Two (a, b); // error masked by earlier error |
| |
| Three (b); // ok |
| Three (a, b); // ok |
| Three (a); // { dg-error "3:'Three' was not declared" } |
| // { dg-message "suggested alternatives" "suggested alternative for Three" { target *-*-* } .-1 } |
| } |