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::vector
y std::array
; y que compilador es correcto?
std::sort
que conduzca a una búsqueda dependiente de argumentos (como ya tiene para std::begin
y std::end
)?
namespace std
incluso 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.