Al llamar std::sort()a 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));
}
Tanto gcc como clang devuelven un error en el tipo en el std::array- dice clang
error: uso del identificador no declarado 'sort'; ¿quiso decir 'std :: sort'?
Cambiar para std::sort(begin(foo2), end(foo2))solucionar el problema.
MSVC compila el código anterior como está escrito.
¿Por qué la diferencia en el tratamiento entre std::vectory std::array; y que compilador es correcto?
std::sortque conduzca a una búsqueda dependiente de argumentos (como ya tiene para std::beginy std::end)?
namespace stdincluso donde un tipo de puntero simple hubiera funcionado. Creo que esto es para insertar verificaciones de compilación de depuración para detectar desbordamientos y otros errores comunes.
sort(...->std::sort(.... Yo supongo que la ADL (dependiente de búsqueda argumento) es lo que te tropezar. Eso, o guías de deducción. En todo caso; Siempre califique las funciones que llama.