svn commit: r228955 - head/include

Ed Schouten ed at FreeBSD.org
Thu Dec 29 14:41:18 UTC 2011


Author: ed
Date: Thu Dec 29 14:41:17 2011
New Revision: 228955
URL: http://svn.freebsd.org/changeset/base/228955

Log:
  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@

Modified:
  head/include/assert.h

Modified: head/include/assert.h
==============================================================================
--- head/include/assert.h	Thu Dec 29 12:33:41 2011	(r228954)
+++ head/include/assert.h	Thu Dec 29 14:41:17 2011	(r228955)
@@ -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
 


More information about the svn-src-all mailing list