Ao chamar std::sort()
um 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));
}
O gcc e o clang retornam um erro na classificação no std::array
- clang diz
erro: uso do identificador não declarado 'sort'; você quis dizer 'std :: sort'?
Alterando para std::sort(begin(foo2), end(foo2))
corrigir o problema.
MSVC compila o código acima conforme escrito.
Por que a diferença de tratamento entre std::vector
e std::array
; e qual compilador está correto?
std::sort
que leva à pesquisa dependente de argumento (como você já possui std::begin
e std::end
)?
namespace std
mesmo onde um tipo simples de ponteiro teria funcionado. Eu acredito que isso é para inserir verificações de depuração para detectar excedentes e outros erros comuns.
sort(...
->std::sort(...
. Eu acho que a ADL (pesquisa dependente de argumento) é o que está atrapalhando você. Isso, ou guias de dedução. Em qualquer caso; sempre qualifique as funções que você chama.