2018-11-07 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / g++.dg / torture / pr56768.C
blobb2be74f28e46f3af545c6785d93e35343338190a
1 // { dg-do compile }
2 // { dg-options "-std=c++0x" }
4 struct Iter
6   int& operator* ();
7   void operator++ ();
8 };
10 bool operator!= (Iter &, Iter &) { return true; }
12 struct Container
14   Iter begin () const;
15   Iter end () const;
18 struct J
20   virtual J *mutable_child ();
23 struct M
25   M (const Container &);
26   J ns_;
28 namespace
30   J MakeNamespace (const Container &src)
31     {
32       J a;
33       J *b = 0;
34       for (const int &c: src)
35         b = b ? b->mutable_child () : &a;
36       return a;
37     }
39 M::M (const Container &ns):ns_ (MakeNamespace (ns))