1// { dg-do compile }
2
3extern "C" {
4void __assert_fail ();
5unsigned long strlen (const char *);
6}
7class A
8{
9  int Data;
10  int Length;
11
12public:
13  A (const char *p1) : Data ()
14  {
15    p1 ? void() : __assert_fail ();
16    Length = strlen (p1);
17  }
18};
19enum TokenKind
20{
21  semi
22};
23class B
24{
25public:
26  void m_fn1 ();
27};
28class C
29{
30  void m_fn2 (TokenKind, int, A);
31  struct D
32  {
33    D (int);
34    B Range;
35  };
36  int *m_fn3 (const int &, int &, int **);
37};
38int a, b;
39int *
40C::m_fn3 (const int &, int &, int **)
41{
42  D c (0);
43  if (a)
44    c.Range.m_fn1 ();
45  m_fn2 (semi, 0, b ? "" : a ? "alias declaration" : "using declaration");
46}
47