summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2012-01-03 23:05:23 +0000
committered <ed@FreeBSD.org>2012-01-03 23:05:23 +0000
commitcaa4548474a54b104b7a14a1625ef6c39b848dd3 (patch)
tree1534560cc5c1a3a61752460a13a22495e7041255 /include
parentff034f8b0d93244190c967c27a0d36173b1bd9b1 (diff)
downloadFreeBSD-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.
Diffstat (limited to 'include')
-rw-r--r--include/stdnoreturn.h6
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 */
OpenPOWER on IntegriCloud