При дзвінку 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
помилка: використання незадекларованого ідентифікатора 'сортування'; ви мали на увазі '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 (пошук, залежний від аргументів) - це те, що вас спонукає. Що, або дедуктивні настанови. У будь-якому випадку; завжди кваліфікуйте функції, які ви телефонуєте.