Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Dec 2011 14:41:18 +0000 (UTC)
From:      Ed Schouten <ed@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r228955 - head/include
Message-ID:  <201112291441.pBTEfI8l060127@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201112291441.pBTEfI8l060127>