| // { dg-do compile } | |
| // { dg-options "-std=c++0x" } | |
| struct Iter | |
| { | |
| int& operator* (); | |
| void operator++ (); | |
| }; | |
| bool operator!= (Iter &, Iter &) { return true; } | |
| struct Container | |
| { | |
| Iter begin () const; | |
| Iter end () const; | |
| }; | |
| struct J | |
| { | |
| virtual J *mutable_child (); | |
| }; | |
| struct M | |
| { | |
| M (const Container &); | |
| J ns_; | |
| }; | |
| namespace | |
| { | |
| J MakeNamespace (const Container &src) | |
| { | |
| J a; | |
| J *b = 0; | |
| for (const int &c: src) | |
| b = b ? b->mutable_child () : &a; | |
| return a; | |
| } | |
| } | |
| M::M (const Container &ns):ns_ (MakeNamespace (ns)) | |
| { | |
| } |