branch: development
commit 17fb010919e9f7e28fe28e13f2710bb85b00cb3a
Author: Bruno Haible <br...@clisp.org>
AuthorDate: Tue May 14 13:51:39 2024 +0200

    Support C++17 compilers in the C++ tests.
    
    * tests/exceptions.at: For C++11 and newer, use the keyword 'noexcept'
    instead of the keyword 'throw'.
---
 tests/exceptions.at | 42 +++++++++++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 13 deletions(-)

diff --git a/tests/exceptions.at b/tests/exceptions.at
index 845ccff2..b18dd875 100644
--- a/tests/exceptions.at
+++ b/tests/exceptions.at
@@ -94,11 +94,19 @@ AT_DATA([common.h],
 # define COMMON_IMPEXP
 #endif
 
+#if __cplusplus >= 201103L
+# define ATTRIBUTE_THROW(type) noexcept (false)
+# define ATTRIBUTE_NOTHROW noexcept (true)
+#else
+# define ATTRIBUTE_THROW(type) throw (type)
+# define ATTRIBUTE_NOTHROW throw ()
+#endif
+
 class COMMON_IMPEXP modexc : public std::exception {
 public:
   modexc (std::string str) : message (str) { }
-  ~modexc () throw () { }
-  virtual const char *what () const throw ()
+  ~modexc () ATTRIBUTE_NOTHROW { }
+  virtual const char *what () const ATTRIBUTE_NOTHROW
   {
     return message.c_str ();
   }
@@ -138,7 +146,7 @@ AT_DATA([module.h],
 # define MODULE_IMPEXP
 #endif
 
-extern "C" int MODULE_IMPEXP modfoo () throw (modexc);
+extern "C" int MODULE_IMPEXP modfoo () ATTRIBUTE_THROW (modexc);
 ]])
 
 AT_DATA([module.cpp],
@@ -146,13 +154,13 @@ AT_DATA([module.cpp],
 #define LIBTOOL_TEST_IN_MODULE
 #include "module.h"
 
-int modbar (void) throw (modexc)
+int modbar (void) ATTRIBUTE_THROW (modexc)
 {
   throw modexc ("exception in module");
 }
 
 extern "C"
-int modfoo (void) throw (modexc)
+int modfoo (void) ATTRIBUTE_THROW (modexc)
 {
   try {
     modbar ();
@@ -184,18 +192,26 @@ AT_DATA([lib.h],
 # define LIB_IMPEXP
 #endif
 
+#if __cplusplus >= 201103L
+# define ATTRIBUTE_THROW(type) noexcept (false)
+# define ATTRIBUTE_NOTHROW noexcept (true)
+#else
+# define ATTRIBUTE_THROW(type) throw (type)
+# define ATTRIBUTE_NOTHROW throw ()
+#endif
+
 class LIB_IMPEXP libexc : public std::exception {
 public:
   libexc (std::string str) : message (str) { }
-  ~libexc () throw () { }
-  virtual const char *what () const throw ()
+  ~libexc () ATTRIBUTE_NOTHROW { }
+  virtual const char *what () const ATTRIBUTE_NOTHROW
   {
     return message.c_str ();
   }
 private:
   std::string message;
 };
-int LIB_IMPEXP libfoo () throw (libexc);
+int LIB_IMPEXP libfoo () ATTRIBUTE_THROW (libexc);
 ]])
 
 AT_DATA([lib.cpp],
@@ -203,12 +219,12 @@ AT_DATA([lib.cpp],
 #define LIBTOOL_TEST_IN_LIB
 #include "lib.h"
 
-int libbar (void) throw (libexc)
+int libbar (void) ATTRIBUTE_THROW (libexc)
 {
   throw libexc ("exception in library");
 }
 
-int libfoo (void) throw (libexc)
+int libfoo (void) ATTRIBUTE_THROW (libexc)
 {
   try {
     libbar ();
@@ -234,8 +250,8 @@ AT_DATA([main.cpp],
 class exc : public std::exception {
 public:
   exc (std::string str) : message (str) { }
-  ~exc () throw () { }
-  virtual const char *what () const throw ()
+  ~exc () ATTRIBUTE_NOTHROW { }
+  virtual const char *what () const ATTRIBUTE_NOTHROW
   {
     return message.c_str ();
   }
@@ -243,7 +259,7 @@ private:
   std::string message;
 };
 
-int foo (void) throw (exc)
+int foo (void) ATTRIBUTE_THROW (exc)
 {
   throw exc ("exception in program");
   return 0;

Reply via email to