((void) ((expression) ? 0 : __assert (expression, __FILE__, __LINE__)))
#define __assert(expression, file, lineno) \
- (printf ("%s:%d: failed assertion\n", file, lineno), \
+ (printf ("%s:%u: failed assertion\n", file, lineno), \
abort (), 0)
#else
-void __eprintf (); /* Defined in libgcc.a */
-#ifdef __STDC__
+#if defined(__STDC__) || defined (__cplusplus)
+
+/* Defined in libgcc.a */
+#ifdef __cplusplus
+extern "C" {
+extern void __eprintf (const char *, const char *, unsigned, const char *);
+}
+#else
+extern void __eprintf (const char *, const char *, unsigned, const char *);
+#endif
#define assert(expression) \
((void) ((expression) ? 0 : __assert (#expression, __FILE__, __LINE__)))
#define __assert(expression, file, line) \
- (__eprintf ("%s:%d: failed assertion `%s'\n", \
+ (__eprintf ("%s:%u: failed assertion `%s'\n", \
file, line, expression), 0)
-#else /* no __STDC__; i.e. -traditional. */
+#else /* no __STDC__ and not C++; i.e. -traditional. */
+
+extern void __eprintf (); /* Defined in libgcc.a */
#define assert(expression) \
((void) ((expression) ? 0 : __assert (expression, __FILE__, __LINE__)))
#define __assert(expression, file, lineno) \
- (__eprintf ("%s:%d: failed assertion `%s'\n", \
+ (__eprintf ("%s:%u: failed assertion `%s'\n", \
file, lineno, "expression"), 0)
-#endif /* no __STDC__; i.e. -traditional. */
+#endif /* no __STDC__ and not C++; i.e. -traditional. */
#endif /* no __GNU__; i.e., /bin/cc. */
#endif