]> git.mxchange.org Git - simgear.git/commitdiff
Fix for old gcc which got broken by fix for VS
authorThomas Geymayer <tomgey@gmail.com>
Fri, 16 Nov 2012 15:49:35 +0000 (16:49 +0100)
committerThomas Geymayer <tomgey@gmail.com>
Fri, 16 Nov 2012 15:49:35 +0000 (16:49 +0100)
simgear/compiler.h
simgear/nasal/cppbind/Ghost.hxx

index 372f571d9d7dd1fa5e0fb4a15d87bf2d2fef8cee..e94c7ee40d2f25768f5587e12f9d0f73f39f8ad1 100644 (file)
@@ -46,6 +46,9 @@
 #    warning GCC compilers prior to 3.4 are suspect  
 #  endif
 
+#  define GCC_VERSION (__GNUC__ * 10000 \
+                     + __GNUC_MINOR__ * 100 \
+                     + __GNUC_PATCHLEVEL__)
 #  define SG_COMPILER_STR "GNU C++ version " SG_STRINGIZE(__GNUC__) "." SG_STRINGIZE(__GNUC_MINOR__)
 #endif // __GNUC__
 
index 746be96cfa1990cfa3f00ee10b4f38cecf02cf0d..288c5113e5b3aff5b61dbd75b04693d9aaeb94fd 100644 (file)
@@ -279,7 +279,20 @@ namespace nasal
       bases()
       {
         BaseGhost* base = BaseGhost::getSingletonPtr();
-        base->addDerived( &Ghost::getTypeFor<BaseGhost> );
+        base->addDerived
+        (
+          // Both ways of retrieving the address of a static member function
+          // should be legal but not all compilers know this.
+          // g++-4.4.7+ has been tested to work with both versions
+#if defined(GCC_VERSION) && GCC_VERSION < 40407
+          // The old version of g++ used on Jenkins (16.11.2012) only compiles
+          // this version.
+          &getTypeFor<BaseGhost>
+#else
+          // VS (2008, 2010, ... ?) only allow this version.
+          &Ghost::getTypeFor<BaseGhost>
+#endif
+        );
 
         // Replace any getter that is not available in the current class.
         // TODO check if this is the correct behavior of function overriding