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