mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Bobby Bingham <koorogi@koorogi.info>
To: musl@lists.openwall.com
Subject: [PATCH] don't shadow functions with macros in C++
Date: Mon, 8 Dec 2014 20:18:12 -0600	[thread overview]
Message-ID: <20141209021810.GA13045@duality.lan> (raw)
In-Reply-To: <20141209000614.GL4574@brightrain.aerifal.cx>

[-- Attachment #1: Type: text/plain, Size: 1947 bytes --]

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 13a45c5..e1af0d5 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 f7c9568..2697e8b 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 0e5836c..0179482 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));

--
Bobby Bingham

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

  reply	other threads:[~2014-12-09  2:18 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-08 14:42 pthread_equal Jörg Krause
2014-12-08 14:56 ` pthread_equal Rich Felker
2014-12-08 16:18   ` pthread_equal Jörg Krause
2014-12-08 16:25     ` pthread_equal Rich Felker
2014-12-08 21:11       ` pthread_equal Jörg Krause
2014-12-09  0:06         ` pthread_equal Rich Felker
2014-12-09  2:18           ` Bobby Bingham [this message]
2014-12-09 22:33             ` [PATCH] don't shadow functions with macros in C++ Jörg Krause
2014-12-10  3:37             ` Rich Felker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141209021810.GA13045@duality.lan \
    --to=koorogi@koorogi.info \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).