tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

static_assert



This is definition is causing problems.
Bug report: https://rt.perl.org/Ticket/Display.html?id=134023

Standalone test case:
#!/bin/sh

cat << EOF > AAAtest.cpp
#include <assert.h>
#ifndef static_assert
#define static_assert theoretical fallback definition that doesnt happen
#endif

int main() {
	static_assert(sizeof(int) < sizeof(char), "some assertion");
	return 0;
}
EOF
c++ -ansi AAAtest.cpp

----- Forwarded message from Kamil Rytarowski <kamil%netbsd.org@localhost> -----

Date: Mon, 3 Oct 2016 12:08:39 +0000
From: Kamil Rytarowski <kamil%netbsd.org@localhost>
To: source-changes-full%NetBSD.org@localhost
Subject: CVS commit: src/include
X-Mailer: log_accum

Module Name:	src
Committed By:	kamil
Date:		Mon Oct  3 12:08:39 UTC 2016

Modified Files:
	src/include: assert.h

Log Message:
Add static_assert macro definition in <assert.h>

This declaration conforms to the C11 standard
Reference: ISO/IEC 9899:201x 7.2 Diagnostics <assert.h>

_Static_assert performs compile-time assertion checking.

According to ISO/IEC 9899:201x (draft) 7.2 Diagnostics <assert.h> defines
the static_assert macro which expands to _Static_assert. It's not
conditionalized by NDEBUG like the assert macro.

According to ISO/IEC N3242=11-0012 (C++1x) the <cassert> header shall
define only the assert macro, but not static_assert as it's already part
of the C++11 language.

Allow to define static_assert in C++ prior the C++11 standard. It might be
broken but a nonstandard C++ compiler might support C11-like _Static_assert
feature. Note that it's fatal for g++ 5.4, but it works for clang++ 3.8.1.

Approved by <joerg>.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/include/assert.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.


Modified files:

Index: src/include/assert.h
diff -u src/include/assert.h:1.21 src/include/assert.h:1.22
--- src/include/assert.h:1.21	Fri Aug 26 01:10:49 2011
+++ src/include/assert.h	Mon Oct  3 12:08:39 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: assert.h,v 1.21 2011/08/26 01:10:49 joerg Exp $	*/
+/*	$NetBSD: assert.h,v 1.22 2016/10/03 12:08:39 kamil Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -104,3 +104,9 @@ void __diagassert(const char *, int, con
 void __diagassert13(const char *, int, const char *, const char *);
 __END_DECLS
 #endif /* __ASSERT_DECLARED */
+
+#if ((__cplusplus - 0) < 201103L)
+#ifndef static_assert
+#define static_assert _Static_assert
+#endif /* static_assert */
+#endif



----- End forwarded message -----


Home | Main Index | Thread Index | Old Index