From: Brandon Williams Date: Mon, 30 Jan 2017 22:21:57 GMT Subject: Re: [PATCH 1/5] add SWAP macro Message-ID: <20170130222157.GC35626@google.com> In-Reply-To: <77098ac8-1084-a5c4-a5e6-fb382e3dc3a0@web.de> On 01/30, René Scharfe wrote: > Am 30.01.2017 um 22:03 schrieb Johannes Schindelin: > >It is curious, though, that an > >expression like "sizeof(a++)" would not be rejected. > > Clang normally warns about something like this ("warning: expression > with side effects has no effect in an unevaluated context > [-Wunevaluated-expression]"), but not if the code is part of a > macro. I don't know if that's intended, but it sure is helpful in > the case of SWAP. > > >Further, what would SWAP(a++, b) do? Swap a and b, and *then* increment a? > > That might be a valid expectation, but GCC says "error: lvalue > required as unary '&' operand" and clang puts it "error: cannot take > the address of an rvalue of type". > > René Perhaps we could disallow a side-effect operator in the macro. By disallow I mean place a comment at the definition to the macro and hopefully catch something like that in code-review. We have the same issue with the `ALLOC_GROW()` macro. -- Brandon Williams