FINAL/OVERRIDE: Define to empty on g++ < 4.7
authorPedro Alves <palves@redhat.com>
Fri, 14 Oct 2016 16:03:16 +0000 (17:03 +0100)
committerPedro Alves <palves@redhat.com>
Fri, 14 Oct 2016 16:03:16 +0000 (17:03 +0100)
final/override were only implemented in g++ 4.7.

include/ChangeLog
2016-10-14  Pedro Alves  <palves@redhat.com>

* ansidecl.h [__cplusplus >= 201103 && GCC_VERSION < 4007] (FINAL,
OVERRIDE): Define as empty.
[__cplusplus < 201103 && GCC_VERSION < 4007] (FINAL): Define as
__final.
[__cplusplus < 201103 && GCC_VERSION >= 4007] (OVERRIDE): Define as
empty.

include/ChangeLog
include/ansidecl.h

index bdff2dd9947879f0aabf4dc21e1af0d53bf95ad0..98b2c656466657e0e108024624573b5f7e5dc37e 100644 (file)
@@ -1,3 +1,12 @@
+2016-10-14  Pedro Alves  <palves@redhat.com>
+
+       * ansidecl.h [__cplusplus >= 201103 && GCC_VERSION < 4007] (FINAL,
+       OVERRIDE): Define as empty.
+       [__cplusplus < 201103 && GCC_VERSION < 4007] (FINAL): Define as
+       __final.
+       [__cplusplus < 201103 && GCC_VERSION >= 4007] (OVERRIDE): Define as
+       empty.
+
 2016-10-14  Pedro Alves  <palves@redhat.com>
 
        * ansidecl.h (GCC_FINAL): Delete.
index 7dd7baaeddfa24008090b0861fef63163ac2da6b..0c716851e3c3464d5bcc1221d5a660915fc440bf 100644 (file)
@@ -329,13 +329,23 @@ So instead we use the macro below and test it against specific values.  */
    this by default (actually GNU++14).  */
 
 #if __cplusplus >= 201103
-/* C++11 claims to be available: use it: */
-#define OVERRIDE override
-#define FINAL final
+/* C++11 claims to be available: use it.  final/override were only
+   implemented in 4.7, though.  */
+# if GCC_VERSION < 4007
+#  define OVERRIDE
+#  define FINAL
+# else
+#  define OVERRIDE override
+#  define FINAL final
+# endif
+#elif GCC_VERSION >= 4007
+/* G++ 4.7 supports __final in C++98.  */
+# define OVERRIDE
+# define FINAL __final
 #else
 /* No C++11 support; leave the macros empty: */
-#define OVERRIDE
-#define FINAL
+# define OVERRIDE
+# define FINAL
 #endif
 
 #ifdef __cplusplus