aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.old-deja/g++.benjamin/14687.C
blob: 494f75c56b5314ef01f5a372b2126e78ce3f5d47 (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
50
51
52
53
// { dg-do run  }
// 981203 bkoz
// g++/14687

#include <assert.h>
unsigned int gtest;

// 7.3.3 the using declaration

// p 3
struct belieze {
  void f(char);
  void g(char);
  enum E { e };
  union { int x; };
};

struct dominica: belieze {
  using belieze::f;
  void f(int i) { f('c'); } // calls belieze::f(char)
  void g(int i) { g('c'); } // recursively calls dominca::g(int)
};


// p 6
namespace A {
  void f(int i) { gtest = 1; }
}

using A::f; 	 //f is a synonym for A::f, that is for A::f(int)

namespace A {
  void f(char c) { gtest = 3; }
}

void foo(void) {
  f('a'); 	 //calls f(int), even though A::f(char) exits
  assert (gtest = 1);
}

void bar(void) {
  using A::f;    //f is a synonm for A::f, that is for A::f(int) and A::f(char)
  f('a'); 	 //calls f(char)
  assert (gtest = 3);
}

int main(void)
{
  foo();
  bar();

  return 0;
}