При звонке 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, и clang возвращают ошибку в сортировке std::array
- clang говорит
ошибка: использование необъявленного идентификатора 'sort'; Вы имели в виду 'std :: sort'?
Изменение, чтобы std::sort(begin(foo2), end(foo2))
исправить проблему.
MSVC компилирует код выше, как написано.
Почему разница в лечении между std::vector
а std::array
; а какой компилятор правильный?
std::sort
которая приводит к зависимому от аргумента поиску (как у вас уже есть для std::begin
и std::end
)?
namespace std
даже там, где работал бы простой тип указателя. Я полагаю, что это вставка проверок отладочной сборки для обнаружения переполнений и других распространенных ошибок.
sort(...
->std::sort(...
. Я предполагаю, что ADL (поиск, зависящий от аргумента) - это то, что сбивает вас с толку. Это, или руководство по выводу. В любом слючае; всегда уточняйте функции, которые вы вызываете.