Re: GCC 8, std::uncaught_exceptions, -std=c++17

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 21 February 2018 at 14:15, Jeffrey Walton wrote:
> Hi Everyone,
>
> I'm trying to determine when I can use std::uncaught_exceptions().
>
>   $ cat test.cxx
>   #include <iostream>
>
>   #ifndef __has_feature
>   #  define __has_feature(x) 0
>   #endif
>
>   #if _MSC_VER >= 1900
>   #  define MY_EXCEPTIONS 1
>   #elif __has_feature(cxx_exceptions)

__has_feature is a Clang extension, GCC doesn't support it, so this is
always false.

>   #  define MY_EXCEPTIONS 1
>   #endif
>
>   #ifdef MY_EXCEPTIONS
>   #  include <exception>
>   #endif
>
>   int main(int argc, char* argv[])
>   {
>   #ifdef MY_EXCEPTIONS
>     std::cout << std::uncaught_exceptions() << std::endl;

You're assuming that if Clang's cxx_exceptions feature is present then
so is the new C++17 function, which is wrong.

The recommended way to test for exceptions being enabled is to test
#if __cpp_exceptions
(that works on Clang and GCC, but not MSVC because they don't support
WG21 SD-6 feature-test macros).

The recommended way to test for std::uncaught_exceptions is #if
__cpp_lib_uncaught_exceptions >= 201411
(that works with libstdc++ but not MSVC or libc++ because they don't
support WG21 SD-6 feature-test macros for the standard library).

SD-6 can be found at
https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux