From f164875a84c35d0e0d132f99330d3fcda76ee7aa Mon Sep 17 00:00:00 2001 From: Bobby Bingham Date: Mon, 8 Dec 2014 20:18:12 -0600 Subject: [PATCH] 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. --- include/complex.h | 2 ++ include/pthread.h | 2 ++ include/threads.h | 2 ++ 3 files changed, 6 insertions(+) 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) +#endif #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)) +#endif 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)) +#endif void call_once(once_flag *, void (*)(void)); -- 2.25.1