path: root/include
diff options
authorBobby Bingham <>2014-12-08 20:18:12 -0600
committerRich Felker <>2014-12-09 22:34:56 -0500
commitf164875a84c35d0e0d132f99330d3fcda76ee7aa (patch)
tree3199c182e8b9b5f882eb9fabd4f69f78ecd2745d /include
parent8f7bc690f07e90177b176b6e19736ad7c1d49840 (diff)
don't shadow functions with macros in C++
C++ programmers typically expect something like "::function(x,y)" to work and may be surprised to find that "(::function)(x,y)" is actually required due to the headers declaring a macro version of some standard functions. We already omit function-like macros for C++ in most cases where there is a real function available. This commit extends this to the remaining function-like macros which have a real function version.
Diffstat (limited to 'include')
3 files changed, 6 insertions, 0 deletions
diff --git a/include/complex.h b/include/complex.h
index 13a45c57..e1af0d59 100644
--- a/include/complex.h
+++ b/include/complex.h
@@ -101,6 +101,7 @@ double creal(double complex);
float crealf(float complex);
long double creall(long double complex);
+#ifndef __cplusplus
#define __CIMAG(x, t) \
((union { _Complex t __z; t __xy[2]; }){(_Complex t)(x)}.__xy[1])
@@ -111,6 +112,7 @@ long double creall(long double complex);
#define cimag(x) __CIMAG(x, double)
#define cimagf(x) __CIMAG(x, float)
#define cimagl(x) __CIMAG(x, long double)
#define __CMPLX(x, y, t) \
((union { _Complex t __z; t __xy[2]; }){.__xy = {(x),(y)}}.__z)
diff --git a/include/pthread.h b/include/pthread.h
index f7c9568c..2697e8bc 100644
--- a/include/pthread.h
+++ b/include/pthread.h
@@ -84,7 +84,9 @@ __attribute__((const))
pthread_t pthread_self(void);
int pthread_equal(pthread_t, pthread_t);
+#ifndef __cplusplus
#define pthread_equal(x,y) ((x)==(y))
int pthread_setcancelstate(int, int *);
int pthread_setcanceltype(int, int *);
diff --git a/include/threads.h b/include/threads.h
index 0e5836c1..01794826 100644
--- a/include/threads.h
+++ b/include/threads.h
@@ -51,7 +51,9 @@ void thrd_yield(void);
thrd_t thrd_current(void);
int thrd_equal(thrd_t, thrd_t);
+#ifndef __cplusplus
#define thrd_equal(A, B) ((A) == (B))
void call_once(once_flag *, void (*)(void));