Quando si chiama std::sort()
un std::array
:
#include <vector>
#include <array>
#include <algorithm>
int main() {
std::vector<int> foo{4, 1, 2, 3};
sort(begin(foo), end(foo));
std::array<int, 4> foo2{4, 1, 2, 3};
sort(begin(foo2), end(foo2));
}
Sia gcc che clang restituiscono un errore nell'ordinamento sul std::array
- dice clang
errore: uso dell'identificatore non dichiarato 'sort'; intendevi "std :: sort"?
La modifica per std::sort(begin(foo2), end(foo2))
risolvere il problema.
MSVC compila il codice sopra come scritto.
Perché la differenza di trattamento tra std::vector
e std::array
; e quale compilatore è corretto?
std::sort
che porta alla ricerca dipendente dall'argomento (come hai già fatto per std::begin
e std::end
)?
namespace std
anche dove un semplice tipo di puntatore avrebbe funzionato. Credo che questo debba inserire controlli di debug per rilevare sovraccarichi e altri errori comuni.
sort(...
->std::sort(...
. Mi immagino che ADL (argomento di ricerca dipendente) è quello che si sta inciampare. Quello o le guide alla detrazione. In ogni caso; qualifica sempre le funzioni che chiami.