testcase fixes for gcc-9
diff --git a/Examples/test-suite/cpp11_lambda_functions.i b/Examples/test-suite/cpp11_lambda_functions.i
index fc02aad..3d7d76d 100644
--- a/Examples/test-suite/cpp11_lambda_functions.i
+++ b/Examples/test-suite/cpp11_lambda_functions.i
@@ -43,14 +43,17 @@
    single statement "return expr;". */
 auto lambda2 = [](int x, int y) { return x+y; };
 
-auto lambda3 = [&](int x, int y) { return x+y; };
-auto lambda4 = [=](int x, int y) { return x+y; };
 int thing = 0;
 #ifdef SWIG
-// Not strictly correct as captured variables should have non-automatic storage duration, ie shouldn't capture globals. gcc-4.7 warns about this, but we check that SWIG can parse this anyway.
+// This is not strictly legal: non-local lambda expression cannot have a capture-default
+// gcc-4.7 warns about this and gcc-9 gives an error, but we check that SWIG can parse this anyway.
+auto lambda3 = [&](int x, int y) { return x+y; };
+auto lambda4 = [=](int x, int y) { return x+y; };
 auto lambda5 = [=,&thing]() { return thing; };
 #else
-auto lambda5 = [=]() { return thing; };
+auto lambda3 = [](int x, int y) { return x+y; };
+auto lambda4 = [](int x, int y) { return x+y; };
+auto lambda5 = []() { return thing; };
 #endif
 
 void fn() {
@@ -115,6 +118,6 @@
 // TODO
 int(*lambda101notauto)(int, int) = [] (int a, int b) { return a + b; };
 int lambda102 = [] (int a, int b) mutable { return a + b; }(1, 2);
-void lambda_init(int = ([=]{ return 0; })());
+void lambda_init(int = ([]{ return 0; })());
 %}
 
diff --git a/Examples/test-suite/java/rename1_runme.java b/Examples/test-suite/java/rename1_runme.java
index 058de41..c04baf8 100644
--- a/Examples/test-suite/java/rename1_runme.java
+++ b/Examples/test-suite/java/rename1_runme.java
@@ -24,7 +24,6 @@
       xyz.tMethod2(0);
       xyz.tMethodNotXYZ2(notxyz);
       xyz.opNotXYZ2();
-      xyz.opXYZ2();
     }
     {
       XYZDouble xyz = new XYZDouble();
@@ -36,7 +35,6 @@
       xyz.tMethod1(0);
       xyz.tMethodNotXYZ1(notxyz);
       xyz.opNotXYZ1();
-      xyz.opXYZ1();
     }
     {
       XYZKlass xyz = new XYZKlass();
@@ -48,7 +46,6 @@
       xyz.tMethod3(new Klass());
       xyz.tMethodNotXYZ3(notxyz);
       xyz.opNotXYZ3();
-      xyz.opXYZ3();
     }
     {
       XYZEnu xyz = new XYZEnu();
@@ -60,7 +57,6 @@
       xyz.tMethod4(Enu.En1);
       xyz.tMethodNotXYZ4(notxyz);
       xyz.opNotXYZ4();
-      xyz.opXYZ4();
     }
     {
       ABC abc = new ABC();
diff --git a/Examples/test-suite/java/rename2_runme.java b/Examples/test-suite/java/rename2_runme.java
index b6a62dd..b97cc59 100644
--- a/Examples/test-suite/java/rename2_runme.java
+++ b/Examples/test-suite/java/rename2_runme.java
@@ -24,7 +24,6 @@
       xyz.tMethod2(0);
       xyz.tMethodNotXYZ2(notxyz);
       xyz.opNotXYZ2();
-      xyz.opXYZ2();
     }
     {
       XYZDouble xyz = new XYZDouble();
@@ -36,7 +35,6 @@
       xyz.tMethod1(0);
       xyz.tMethodNotXYZ1(notxyz);
       xyz.opNotXYZ1();
-      xyz.opXYZ1();
     }
     {
       XYZKlass xyz = new XYZKlass();
@@ -48,7 +46,6 @@
       xyz.tMethod3(new Klass());
       xyz.tMethodNotXYZ3(notxyz);
       xyz.opNotXYZ3();
-      xyz.opXYZ3();
     }
     {
       XYZEnu xyz = new XYZEnu();
@@ -60,7 +57,6 @@
       xyz.tMethod4(Enu.En1);
       xyz.tMethodNotXYZ4(notxyz);
       xyz.opNotXYZ4();
-      xyz.opXYZ4();
     }
     {
       ABC abc = new ABC();
diff --git a/Examples/test-suite/java/rename3_runme.java b/Examples/test-suite/java/rename3_runme.java
index e1b090a..222d548 100644
--- a/Examples/test-suite/java/rename3_runme.java
+++ b/Examples/test-suite/java/rename3_runme.java
@@ -24,7 +24,6 @@
       xyz.tMethod2(0);
       xyz.tMethodNotXYZ2(notxyz);
       xyz.opNotXYZ2();
-      xyz.opXYZ2();
     }
     {
       XYZDouble xyz = new XYZDouble();
@@ -36,7 +35,6 @@
       xyz.tMethod1(0);
       xyz.tMethodNotXYZ1(notxyz);
       xyz.opNotXYZ1();
-      xyz.opXYZ1();
     }
     {
       XYZKlass xyz = new XYZKlass();
@@ -48,7 +46,6 @@
       xyz.tMethod3(new Klass());
       xyz.tMethodNotXYZ3(notxyz);
       xyz.opNotXYZ3();
-      xyz.opXYZ3();
     }
     {
       XYZEnu xyz = new XYZEnu();
@@ -60,7 +57,6 @@
       xyz.tMethod4(Enu.En1);
       xyz.tMethodNotXYZ4(notxyz);
       xyz.opNotXYZ4();
-      xyz.opXYZ4();
     }
     {
       ABC abc = new ABC();
diff --git a/Examples/test-suite/java/rename4_runme.java b/Examples/test-suite/java/rename4_runme.java
index 69f909e..ef92dd3 100644
--- a/Examples/test-suite/java/rename4_runme.java
+++ b/Examples/test-suite/java/rename4_runme.java
@@ -24,7 +24,6 @@
       xyz.tMethod2(0);
       xyz.tMethodNotXYZ2(notxyz);
       xyz.opNotXYZ2();
-      xyz.opXYZ2();
     }
     {
       XYZDouble xyz = new XYZDouble();
@@ -36,7 +35,6 @@
       xyz.tMethod1(0);
       xyz.tMethodNotXYZ1(notxyz);
       xyz.opNotXYZ1();
-      xyz.opXYZ1();
     }
     {
       XYZKlass xyz = new XYZKlass();
@@ -48,7 +46,6 @@
       xyz.tMethod3(new Klass());
       xyz.tMethodNotXYZ3(notxyz);
       xyz.opNotXYZ3();
-      xyz.opXYZ3();
     }
     {
       XYZEnu xyz = new XYZEnu();
@@ -60,7 +57,6 @@
       xyz.tMethod4(Enu.En1);
       xyz.tMethodNotXYZ4(notxyz);
       xyz.opNotXYZ4();
-      xyz.opXYZ4();
     }
     {
       ABC abc = new ABC();
diff --git a/Examples/test-suite/javascript/rename1_runme.js b/Examples/test-suite/javascript/rename1_runme.js
index 68ecc11..7b2ac37 100644
--- a/Examples/test-suite/javascript/rename1_runme.js
+++ b/Examples/test-suite/javascript/rename1_runme.js
@@ -10,7 +10,6 @@
   xyz.tMethod2(0);
   xyz.tMethodNotXYZ2(notxyz);
   xyz.opNotXYZ2();
-  xyz.opXYZ2();
 }
 
 function part2() {
@@ -23,7 +22,6 @@
   xyz.tMethod1(0);
   xyz.tMethodNotXYZ1(notxyz);
   xyz.opNotXYZ1();
-  xyz.opXYZ1();
 }
 
 function part3(){
@@ -36,7 +34,6 @@
   xyz.tMethod3(new rename.Klass());
   xyz.tMethodNotXYZ3(notxyz);
   xyz.opNotXYZ3();
-  xyz.opXYZ3();
 }
 
 function part4() {
@@ -49,7 +46,6 @@
   xyz.tMethod4(rename.En1);
   xyz.tMethodNotXYZ4(notxyz);
   xyz.opNotXYZ4();
-  xyz.opXYZ4();
 }
 
 function part5() {
diff --git a/Examples/test-suite/javascript/rename2_runme.js b/Examples/test-suite/javascript/rename2_runme.js
index 99f4785..040c798 100644
--- a/Examples/test-suite/javascript/rename2_runme.js
+++ b/Examples/test-suite/javascript/rename2_runme.js
@@ -10,7 +10,6 @@
   xyz.tMethod2(0);
   xyz.tMethodNotXYZ2(notxyz);
   xyz.opNotXYZ2();
-  xyz.opXYZ2();
 }
 
 function part2() {
@@ -23,7 +22,6 @@
   xyz.tMethod1(0);
   xyz.tMethodNotXYZ1(notxyz);
   xyz.opNotXYZ1();
-  xyz.opXYZ1();
 }
 
 function part3(){
@@ -36,7 +34,6 @@
   xyz.tMethod3(new rename.Klass());
   xyz.tMethodNotXYZ3(notxyz);
   xyz.opNotXYZ3();
-  xyz.opXYZ3();
 }
 
 function part4() {
@@ -49,7 +46,6 @@
   xyz.tMethod4(rename.En1);
   xyz.tMethodNotXYZ4(notxyz);
   xyz.opNotXYZ4();
-  xyz.opXYZ4();
 }
 
 function part5() {
diff --git a/Examples/test-suite/javascript/rename3_runme.js b/Examples/test-suite/javascript/rename3_runme.js
index 237029f..fb9393b 100644
--- a/Examples/test-suite/javascript/rename3_runme.js
+++ b/Examples/test-suite/javascript/rename3_runme.js
@@ -10,7 +10,6 @@
   xyz.tMethod2(0);
   xyz.tMethodNotXYZ2(notxyz);
   xyz.opNotXYZ2();
-  xyz.opXYZ2();
 }
 
 function part2() {
@@ -23,7 +22,6 @@
   xyz.tMethod1(0);
   xyz.tMethodNotXYZ1(notxyz);
   xyz.opNotXYZ1();
-  xyz.opXYZ1();
 }
 
 function part3(){
@@ -36,7 +34,6 @@
   xyz.tMethod3(new rename.Klass());
   xyz.tMethodNotXYZ3(notxyz);
   xyz.opNotXYZ3();
-  xyz.opXYZ3();
 }
 
 function part4() {
@@ -49,7 +46,6 @@
   xyz.tMethod4(rename.En1);
   xyz.tMethodNotXYZ4(notxyz);
   xyz.opNotXYZ4();
-  xyz.opXYZ4();
 }
 
 function part5() {
diff --git a/Examples/test-suite/javascript/rename4_runme.js b/Examples/test-suite/javascript/rename4_runme.js
index fed50dc..1c3d8e7 100644
--- a/Examples/test-suite/javascript/rename4_runme.js
+++ b/Examples/test-suite/javascript/rename4_runme.js
@@ -10,7 +10,6 @@
   xyz.tMethod2(0);
   xyz.tMethodNotXYZ2(notxyz);
   xyz.opNotXYZ2();
-  xyz.opXYZ2();
 }
 
 function part2() {
@@ -23,7 +22,6 @@
   xyz.tMethod1(0);
   xyz.tMethodNotXYZ1(notxyz);
   xyz.opNotXYZ1();
-  xyz.opXYZ1();
 }
 
 function part3(){
@@ -36,7 +34,6 @@
   xyz.tMethod3(new rename.Klass());
   xyz.tMethodNotXYZ3(notxyz);
   xyz.opNotXYZ3();
-  xyz.opXYZ3();
 }
 
 function part4() {
@@ -49,7 +46,6 @@
   xyz.tMethod4(rename.En1);
   xyz.tMethodNotXYZ4(notxyz);
   xyz.opNotXYZ4();
-  xyz.opXYZ4();
 }
 
 function part5() {
diff --git a/Examples/test-suite/rename.h b/Examples/test-suite/rename.h
index c8199ee..3f10c58 100644
--- a/Examples/test-suite/rename.h
+++ b/Examples/test-suite/rename.h
@@ -27,7 +27,6 @@
     void templateXYZ(XYZ<T> i) {}
     operator T() { return m_t; }
     operator NotXYZ<T>() const { return m_notxyz; }
-    operator XYZ<T>() const { XYZ<T> xyz = XYZ<T>(); return xyz; }
   };
 }
 
@@ -48,10 +47,7 @@
   public:
     void method(ABC a) const {}
     void method(Klass k) const {}
-#if !defined(__clang__)
-    // Workaround for: warning: conversion function converting 'Space::ABC' to itself will never be used
-    operator ABC() const { ABC a; return a; }
-#endif
+    operator ABC*() const { return new ABC(); }
     operator Klass() const { Klass k; return k; }
 };
 }
diff --git a/Examples/test-suite/rename1.i b/Examples/test-suite/rename1.i
index 38af2b3..92e6b34 100644
--- a/Examples/test-suite/rename1.i
+++ b/Examples/test-suite/rename1.i
@@ -35,14 +35,9 @@
 %rename(opNotXYZ3) Space::XYZ<Space::Klass>::operator NotXYZ<Space::Klass>() const;
 %rename(opNotXYZ4) Space::XYZ<Space::Enu>::operator NotXYZ<Space::Enu>() const;
 
-%rename(opXYZ1) Space::XYZ::operator XYZ<T>() const;
-%rename(opXYZ2) Space::XYZ<int>::operator XYZ<int>() const;
-%rename(opXYZ3) Space::XYZ<Space::Klass>::operator XYZ<Space::Klass>() const;
-%rename(opXYZ4) Space::XYZ<Space::Enu>::operator XYZ<Space::Enu>() const;
-
 
 %rename(methodABC) Space::ABC::method(ABC a) const;
-%rename(opABC) Space::ABC::operator ABC() const;
+%rename(opABC) Space::ABC::operator ABC*() const;
 %rename(methodKlass) Space::ABC::method(Klass k) const;
 %rename(opKlass) Space::ABC::operator Klass() const;
 
diff --git a/Examples/test-suite/rename2.i b/Examples/test-suite/rename2.i
index 6a9c22e..93b82dd 100644
--- a/Examples/test-suite/rename2.i
+++ b/Examples/test-suite/rename2.i
@@ -43,7 +43,7 @@
 
 
 %rename(methodABC) ABC::method(ABC a) const;
-%rename(opABC) ABC::operator ABC() const;
+%rename(opABC) ABC::operator ABC*() const;
 %rename(methodKlass) ABC::method(Klass k) const;
 %rename(opKlass) ABC::operator Klass() const;
 }
diff --git a/Examples/test-suite/rename3.i b/Examples/test-suite/rename3.i
index b39979f..5b613d7 100644
--- a/Examples/test-suite/rename3.i
+++ b/Examples/test-suite/rename3.i
@@ -52,7 +52,7 @@
 
   %extend ABC {
     %rename(methodABC) method(ABC a) const;
-    %rename(opABC) operator ABC() const;
+    %rename(opABC) operator ABC*() const;
     %rename(methodKlass) method(Klass k) const;
     %rename(opKlass) operator Klass() const;
   }
diff --git a/Examples/test-suite/rename4.i b/Examples/test-suite/rename4.i
index 9ddff36..75f01ca 100644
--- a/Examples/test-suite/rename4.i
+++ b/Examples/test-suite/rename4.i
@@ -29,21 +29,18 @@
 %rename(tMethodXYZ2) templateXYZ(XYZ<int>);
 %rename(opT2) operator int();
 %rename(opNotXYZ2) operator NotXYZ<int>() const;
-%rename(opXYZ2) operator XYZ<int>() const;
 
 %rename(tMethod3) templateT(Space::Klass i);
 %rename(tMethodNotXYZ3) templateNotXYZ(NotXYZ<Space::Klass>);
 %rename(tMethodXYZ3) templateXYZ(XYZ<Space::Klass>);
 %rename(opT3) operator Space::Klass();
 %rename(opNotXYZ3) operator NotXYZ<Space::Klass>() const;
-%rename(opXYZ3) operator XYZ<Space::Klass>() const;
 
 %rename(tMethod4) templateT(Space::Enu i);
 %rename(tMethodNotXYZ4) templateNotXYZ(NotXYZ<Space::Enu>);
 %rename(tMethodXYZ4) templateXYZ(XYZ<Space::Enu>);
 %rename(opT4) operator Space::Enu();
 %rename(opNotXYZ4) operator NotXYZ<Space::Enu>() const;
-%rename(opXYZ4) operator XYZ<Space::Enu>() const;
 
 namespace Space {
   using namespace AnotherSpace;
@@ -60,7 +57,6 @@
     %rename(tMethodXYZ1) templateXYZ(XYZ<T>);
     %rename(opT1) operator T();
     %rename(opNotXYZ1) operator NotXYZ<T>() const;
-    %rename(opXYZ1) operator XYZ<T>() const;
 
     NotXYZ<int> *m_int;
     T m_t;
@@ -74,7 +70,6 @@
     void templateXYZ(XYZ<T> i) {}
     operator T() { return m_t; }
     operator NotXYZ<T>() const { return m_notxyz; }
-    operator XYZ<T>() const { XYZ<T> xyz; return xyz; }
   };
 }
 
@@ -93,16 +88,13 @@
   public:
 
     %rename(methodABC) method(ABC a) const;
-    %rename(opABC) operator ABC() const;
+    %rename(opABC) operator ABC*() const;
     %rename(methodKlass) method(Klass k) const;
     %rename(opKlass) operator Klass() const;
 
     void method(ABC a) const {}
     void method(Klass k) const {}
-#if !defined(__clang__)
-    // Workaround for: warning: conversion function converting 'Space::ABC' to itself will never be used
-    operator ABC() const { ABC a; return a; }
-#endif
+    operator ABC*() const { return new ABC(); }
     operator Klass() const { Klass k; return k; }
 };
 }