[cfe-dev] [libc++] possible bug?

Matthieu Monrocq matthieu.monrocq at gmail.com
Mon Apr 23 09:53:29 PDT 2012


Le 22 avril 2012 23:58, Ovanes Markaryan <om_clang at keywallet.com> a écrit :

>
>
> On Sun, Apr 22, 2012 at 11:32 PM, Marc Glisse <marc.glisse at inria.fr>wrote:
>
>> On Sun, 22 Apr 2012, Ovanes Markaryan wrote:
>>
>>  Hello *,
>>> just tried to compile SYMPHONY-5.4.4 with clang 3.0 + libc++ (tag 31).
>>> While
>>> compiling it I receive this error:
>>>
>>> include/c++/v1/algorithm:643:**97: error: invalid operands to binary
>>> expression
>>>       ('const reducedCost' and 'const reducedCost')
>>>     _LIBCPP_INLINE_VISIBILITY bool operator()(const _T1& __x, const _T1&
>>> __y) const {return __x < __y;}
>>>
>>
>> [...]
>>
>>
>>      bool operator<(const reducedCost & other)
>>>
>>
>> Missing const here. It is often preferable to avoid making operators
>> member functions when you can avoid it.
>>
>>      {
>>>         return (value>other.value);
>>>     }
>>>
>>
>> --
>> Marc Glisse
>>
>
> Hello Marc,
>
> you are definitely right. I overlooked it, since as already wrote this is
> not my code (just copy pasted it from the lib)... But in my tests I
> commented out this operator< and provided the specialization of  std::less,
> to just test it and it failed as well. I did not test with both enable
> (operator< and less-specialization). Actually this code is somehow really
> bad, because less is actually not less but greater ;) This code compiles
> fine with gcc and clang + gcc's version of stdlib. As far as I remember the
> standard requires that std::less is specialized to allow the less
> comparison or the operator< is implicitly used through the generalized
> less. In my tests less specialization was not considered by make_heap. This
> is my point.
>
> Thanks,
> Ovanes
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
Two questions:

1. Does it work if you actually specify that `operator<` is `const` ?

2. Did you were careful about putting the specialization of `less` (for
this class) before its first use ? (it is not clear from your example)

If you could, for example, provide a simple attachment that reproduces the
issue it would be slightly simpler to investigate.

-- Matthieu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120423/f5b7183f/attachment.html>


More information about the cfe-dev mailing list