summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/lookup/koenig5.C
blob: c44543bd52fe3a2ef8986d89e9276495f8a4f56f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// 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 behaviour

// 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 "not declared" }
  // { dg-message "suggested alternatives" "suggested alternative for One" { target *-*-* } 34 }

  Two (c); // ok
  Two (a, c); // ok
  Two (a); // { dg-error "not declared" }
  // { dg-message "suggested alternatives" "suggested alternative for Two" { target *-*-* } 39 }
  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 "not declared" }
  // { dg-message "suggested alternatives" "suggested alternative for Three" { target *-*-* } 47 }
}