diff options
author | ed <ed@FreeBSD.org> | 2012-01-03 23:05:23 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2012-01-03 23:05:23 +0000 |
commit | caa4548474a54b104b7a14a1625ef6c39b848dd3 (patch) | |
tree | 1534560cc5c1a3a61752460a13a22495e7041255 | |
parent | ff034f8b0d93244190c967c27a0d36173b1bd9b1 (diff) | |
download | FreeBSD-src-caa4548474a54b104b7a14a1625ef6c39b848dd3.zip FreeBSD-src-caa4548474a54b104b7a14a1625ef6c39b848dd3.tar.gz |
Simply disallow <stdnoreturn.h> to be used in combination with C++.
There is no way one could possibly use this header file in combination
with C++ code. The problem is that in C11 the `noreturn' macro expands
to the `_Noreturn' function specifier, while in C++11 the `noreturn'
keyword is an attribute.
So in C11 you have to write:
noreturn void exit(int status);
While in C++11 you have to write:
[[noreturn]] void exit(int status);
It is impossible to #define noreturn for C++ in such a way that it
allows both conventions.
By intentionally breaking this header this way, we prevent people from
using this header in their C++<11 sources.
-rw-r--r-- | include/stdnoreturn.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/include/stdnoreturn.h b/include/stdnoreturn.h index f022730..218a3a0 100644 --- a/include/stdnoreturn.h +++ b/include/stdnoreturn.h @@ -26,11 +26,13 @@ * $FreeBSD$ */ +#ifdef __cplusplus +#error "<stdnoreturn.h> cannot be used in combination with C++11." +#endif + #ifndef noreturn -#if !defined(__cplusplus) || __cplusplus < 201103L #include <sys/cdefs.h> #define noreturn _Noreturn -#endif #endif /* !noreturn */ |