Don't define static_assert for C++.
Even though _Static_assert() is pretty robust for C code, it cannot work correctly with C++ code. This is due to the fact that C++ template parameters may contain commas that are not enclosed in parentheses. For example: static_assert(foo<int, int>::bar == baz, "..."); This causes _Static_assert to be called with an excessive number of parameters. If you want to use static_assert in C++, just use a C++11 compiler. Reported on: current@, ports@
This commit is contained in:
parent
47e236b178
commit
ffa01562fd
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=228955
@ -58,7 +58,16 @@
|
||||
#ifndef _ASSERT_H_
|
||||
#define _ASSERT_H_
|
||||
|
||||
#if __ISO_C_VISIBLE >= 2011 && (!defined(__cplusplus) || __cplusplus < 201103L)
|
||||
/*
|
||||
* Static assertions. In principle we could define static_assert for
|
||||
* C++ older than C++11, but this breaks if _Static_assert is
|
||||
* implemented as a macro.
|
||||
*
|
||||
* C++ template parameters may contain commas, even if not enclosed in
|
||||
* parentheses, causing the _Static_assert macro to be invoked with more
|
||||
* than two parameters.
|
||||
*/
|
||||
#if __ISO_C_VISIBLE >= 2011 && !defined(__cplusplus)
|
||||
#define static_assert _Static_assert
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user