PR c++/86728 - C variadic generic lambda.
[official-gcc.git] / gcc / testsuite / g++.dg / opt / pr52643.C
blob271dd76c12d38c498486e951e00694601c1f0436
1 // PR c++/52643
2 // { dg-options "-O" }
4 template<class T> class already_AddRefd {};
6 template<class T>
7 class ObjRef
9 public:
10   ObjRef() {}
12   ObjRef(const already_AddRefd<T> aar) {}
14   ~ObjRef()
15   {
16     T* mPtr;
17     mPtr->release_ref();
18   }
20   operator T* () const
21   {
22     return __null;
23   }
25   template<class U>
26   void operator= (const already_AddRefd<U>& newAssign) {}
29 class MyRetClass {
30 public:
31   void release_ref();
34 class MyClass
36   void appendChild();
37   void getTripleOutOfByPredicate();
38   already_AddRefd<MyRetClass> getNextTriple();
41 void
42 MyClass::getTripleOutOfByPredicate()
44   ObjRef<MyRetClass> t (getNextTriple());
46   if (t == __null)
47     throw MyRetClass();
50 void
51 MyClass::appendChild()
53   while (1)
54   {
55     try
56     {
57       ObjRef<MyRetClass> t (getNextTriple());
58       continue;
59     }
60     catch (MyRetClass)
61     {
62     }
63   }