]> sourceware.org Git - glibc.git/commitdiff
Define __THROW to noexcept for C++11 and later
authorJonathan Wakely <jwakely@redhat.com>
Tue, 22 Sep 2020 10:54:38 +0000 (11:54 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Tue, 22 Sep 2020 10:54:38 +0000 (11:54 +0100)
The __THROW macro and friends expand to "throw ()" for C++ code, but
that syntax is deprecated in C++11 and no longer supported at all since
C++20. In order for glibc headers to be compatible with C++20,
"noexcept" should be used instead.

This patch uses "noexcept (true)" rather than just "noexcept", which is
semantically equivalent, but avoids any possibility of parsing
ambiguities if the next preprocessor token happens to be an opening
parenthesis. This is probably unnecessary, but it seems safer to be
cautious.

misc/sys/cdefs.h

index 19d9cc5cfe14e6f6426731ddfe34a526bc2f685e..6b9763a92a7e42974581a3811fcb1b5a22313da2 100644 (file)
 #  define __NTHNL(fct)  __attribute__ ((__nothrow__)) fct
 # else
 #  if defined __cplusplus && __GNUC_PREREQ (2,8)
-#   define __THROW     throw ()
-#   define __THROWNL   throw ()
-#   define __NTH(fct)  __LEAF_ATTR fct throw ()
-#   define __NTHNL(fct) fct throw ()
+#   if __cplusplus >= 201103L
+#    define __THROW    noexcept (true)
+#   else
+#    define __THROW    throw ()
+#   endif
+#   define __THROWNL   __THROW
+#   define __NTH(fct)  __LEAF_ATTR fct __THROW
+#   define __NTHNL(fct) fct __THROW
 #  else
 #   define __THROW
 #   define __THROWNL
This page took 0.047814 seconds and 5 git commands to generate.