Lorsque vous faites appel std::sort()à 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));
}
Gcc et clang renvoient tous deux une erreur sur le tri sur std::array- clang dit
erreur: utilisation de l'identifiant non déclaré «tri»; vouliez-vous dire 'std :: sort'?
Changer pour std::sort(begin(foo2), end(foo2))résoudre le problème.
MSVC compile le code ci-dessus tel qu'il est écrit.
Pourquoi la différence de traitement entre std::vectoret std::array; et quel compilateur est correct?
std::sortqui mène à une recherche dépendante des arguments (comme vous l'avez déjà pour std::beginet std::end)?
namespace stdmême là où un type de pointeur simple aurait fonctionné. Je crois que cela consiste à insérer des vérifications de build de débogage pour détecter les dépassements et autres erreurs courantes.
sort(...->std::sort(.... Je suppose que l'ADL (recherche dépendante de l'argument) est ce qui vous fait trébucher. Ça, ou des guides de déduction. Dans tout les cas; qualifiez toujours les fonctions que vous appelez.