RFC: Add _GLIBCXX_NOEXCEPT_C macro for conditional noexcept

Jonathan Wakely jwakely@redhat.com
Fri Jun 26 10:33:00 GMT 2015


I keep considering making this change:

--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -117,10 +117,12 @@
 #  define _GLIBCXX_NOEXCEPT noexcept
 #  define _GLIBCXX_USE_NOEXCEPT noexcept
 #  define _GLIBCXX_THROW(_EXC)
+#  define _GLIBCXX_NOEXCEPT_C(_CONSTANT) noexcept(_CONSTANT)
 # else
 #  define _GLIBCXX_NOEXCEPT
 #  define _GLIBCXX_USE_NOEXCEPT throw()
 #  define _GLIBCXX_THROW(_EXC) throw(_EXC)
+#  define _GLIBCXX_NOEXCEPT_C(_CONSTANT)
 # endif
 #endif
 

It would allow code like this:

    basic_string()
  #if __cplusplus >= 201103L
    noexcept(is_nothrow_default_constructible<_Alloc>::value)
  #endif

to be replaced with this:

    basic_string()
    _GLIBCXX_NOEXCEPT_C(is_nothrow_default_constructible<_Alloc>::value)

But I can't decide if that's really an improvement.

Does anyone else have an opinion?



More information about the Libstdc++ mailing list