This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: libstdc++ __inplace_stable_sort build failure
- From: Niklas Gürtler <profclonk at gmail dot com>
- To: gcc-help at gcc dot gnu dot org
- Date: Mon, 30 Apr 2018 15:26:07 +0200
- Subject: Re: libstdc++ __inplace_stable_sort build failure
- Autocrypt: addr=profclonk at gmail dot com; prefer-encrypt=mutual; keydata= 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 sYxQCP/avg9L9xyVOxM=
- Openpgp: preference=signencrypt
- References: <5ae71543.1c69fb81.aa90a.ed42@mx.google.com>
A few notes:
intPair data[(int64_t)1e7];
is unusual and possibly dangerous because of floating point inaccuracy,
I'd simply prefer
intPair data[1000000];
You should also make lhs and rhs references:
bool less(const intPair& lhs, const intPair& rhs) {
Also use std::end to completely avoid that C-Style macro:
std::stable_sort(std::begin (data), std::end (data), less);
The std::begin is optional, but makes it easier to later change the type
of "data" (e.g. to std::vector).
On 30.04.2018 15:08, nsajko@gmail.com wrote:
> The following program:
>
>
> #include <algorithm>
>
> #define ARRAY_LEN(arr) (sizeof(arr) / sizeof((arr)[0]))
>
> typedef struct {
> int64_t a;
> int64_t b;
> } intPair;
> intPair data[(int64_t)1e7];
>
> bool
> less(const intPair lhs, const intPair rhs) {
> return lhs.a < rhs.a;
> }
>
> int
> main(void) {
> std::stable_sort(data, data + ARRAY_LEN(data), less);
> std::__inplace_stable_sort(data, data + ARRAY_LEN(data), less);
> return 0;
> }
>
>
> gives the following error (notice that the error is only for
> __inplace_stable_sort, not for stable_sort):
>
>
> In file included from /usr/include/c++/7.3.1/algorithm:62:0,
> from cxxStableSortSimpler.cxx:1:
> /usr/include/c++/7.3.1/bits/stl_algo.h: In instantiation of ‘void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = intPair*; _Compare = bool (*)(intPair, intPair)]’:
> /usr/include/c++/7.3.1/bits/stl_algo.h:2766:25: required from ‘void std::__inplace_stable_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = intPair*; _Compare = bool (*)(intPair, intPair)]’
> cxxStableSortSimpler.cxx:19:63: required from here
> /usr/include/c++/7.3.1/bits/stl_algo.h:1847:14: error: could not convert ‘__i’ from ‘intPair*’ to ‘intPair’
> if (__comp(__i, __first))
> ~~~~~~^~~~~~~~~~~~~~
> /usr/include/c++/7.3.1/bits/stl_algo.h: In instantiation of ‘void std::__merge_without_buffer(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Distance, _Distance, _Compare) [with _BidirectionalIterator = intPair*; _Distance = long int; _Compare = bool (*)(intPair, intPair)]’:
> /usr/include/c++/7.3.1/bits/stl_algo.h:2772:34: required from ‘void std::__inplace_stable_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = intPair*; _Compare = bool (*)(intPair, intPair)]’
> cxxStableSortSimpler.cxx:19:63: required from here
> /usr/include/c++/7.3.1/bits/stl_algo.h:2487:14: error: could not convert ‘__middle’ from ‘intPair*’ to ‘intPair’
> if (__comp(__middle, __first))
> ~~~~~~^~~~~~~~~~~~~~~~~~~
>
>
> So how does one use __inplace_stable_sort correctly?
>
> Regards,
> Neven Sajko
>