https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92472

--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to David Binderman from comment #0)
> Message:
> 
> trunk/libstdc++-v3/include/parallel/multiway_merge.h:121:40: style:
> Parameter '__bi2' can be declared with const [constParameter]
> trunk/libstdc++-v3/include/parallel/multiway_merge.h:191:42: style:
> Parameter '__bi2' can be declared with const [constParameter]
> 
> Patch:
> 
> Index: libstdc++-v3/include/parallel/multiway_merge.h
> ===================================================================
> --- libstdc++-v3/include/parallel/multiway_merge.h  (revision 278050)
> +++ libstdc++-v3/include/parallel/multiway_merge.h  (working copy)
> @@ -118,7 +118,7 @@
>         *  @return @c true if less. */
>        friend bool
>        operator<(_GuardedIterator<_RAIter, _Compare>& __bi1,
> -       _GuardedIterator<_RAIter, _Compare>& __bi2)
> +       _GuardedIterator<_RAIter, const _Compare>& __bi2)
>        {
>     if (__bi1._M_current == __bi1._M_end)       // __bi1 is sup
>       return __bi2._M_current == __bi2._M_end;  // __bi2 is not sup
> @@ -188,7 +188,7 @@
>         *  @return @c true if less. */
>        friend bool
>        operator<(_UnguardedIterator<_RAIter, _Compare>& __bi1,
> -       _UnguardedIterator<_RAIter, _Compare>& __bi2)
> +       _UnguardedIterator<_RAIter, const _Compare>& __bi2)
>        {
>     // Normal compare.
>     return (__bi1.__comp)(*__bi1, *__bi2);

This is 400% wrong. It doesn't even address what cppcheck is complaining about,
and cppcheck is drunk anyway. Those parameter can NOT be const, because *__b1
and *__b2 will not compile if they're const, because operator* is not const.

> All patches seemed to bootstrap ok.

But what about testing them?

Reply via email to