#else
-#ifdef __STDC__
+#if defined(__STDC__) || defined (__cplusplus)
/* Defined in libgcc.a */
+#ifdef __cplusplus
+extern "C" {
extern void __eprintf (const char *, const char *, int, const char *);
+}
+#else
+extern void __eprintf (const char *, const char *, int, const char *);
+#endif
#define assert(expression) \
((void) ((expression) ? 0 : __assert (#expression, __FILE__, __LINE__)))
(__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 */
(__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