Почему функция сортировки находится в глобальном пространстве имен?


Почему в глобальном пространстве имен C++существует функция сортировки? Почему этот код компилируется?

#include <iostream>
#include <vector>

int main() {
    std::vector<int> array(10);
    sort(array.begin(), array.end());
}

PS: clang++ -- std=c++11 --stdlib=libc++ ./тест.cpp

1 3

1 ответ:

sort находится не в глобальном пространстве имен, а в std. Тем не менее, тип результата vector::begin() может быть также в std (это зависит от реализации). Если это так, то std::sort находится с помощью ADL (argument-dependent lookup).

Если вы не хотите, чтобы std::sort был найден ADL, то вы можете сделать квалифицированный вызов sort вместо неквалифицированного: ::sort(array.begin(), array.end()).