std::max: if versus ?:
Marc Glisse
marc.glisse@inria.fr
Thu Sep 20 12:24:00 GMT 2012
On Thu, 20 Sep 2012, Paolo Carlini wrote:
> On 09/20/2012 01:55 PM, Marc Glisse wrote:
>> Hello,
>>
>> I noticed that std::max is implemented as:
>>
>> //return __a < __b ? __b : __a;
>> if (__a < __b)
>> return __b;
>> return __a;
>>
>> Notice how it doesn't use the ?: code but the "if" version instead. Looking
>> at the history, this seems to come from SGI. Does someone know why it was
>> done this way?
> I'm going to tell you something very vague and non technical, but in the
> past, outside std::max, I had quite often to use the above instead of a
> conditional operator as a second thought, when (maybe on a less common
> target) a test "unexpectedly" failed with a conversion error. Does that help
> you figuring out the technical details of the issue?
When a and b have possibly different types, using "if" makes a lot of
sense (I even advocated replacing ?: with "if" somewhere in the gcc
codebase in PR50177). Inside std::max, a and b both have exactly the same
type const _Tp&, so it shouldn't matter.
Note that libcxx uses ?: for its implementation of std::max.
I assume there are historical reasons, some compilers had bugs in their ?:
support or produced slightly faster code with "if"...
--
Marc Glisse
More information about the Libstdc++
mailing list