Проблема здесь не в том, что вызов sort
неоднозначен, а в том, что имя sort
неоднозначно. Поиск имени происходит до разрешения перегрузки.
Я считаю, что соответствующий раздел [basic.lookup] / 1 , в частности
[& hellip;] Объявления, найденные при поиске имени, должны либо обозначать одну и ту же сущность, либо все должны обозначать функции или шаблоны функций; в последнем случае декларации образуют набор перегруженных функций ([over.load]). [& Hellip;] * * 1 010
В вашем случае имя sort
обозначает как объект boot::sort
, так и набор перегруженных функций std::sort
. Таким образом поиск имени не удается.
Ваш код действительно ничем не отличается от того, что вы написали, например
namespace baz {
int a;
}
namespace boot {
int a;
}
void foo() {
using namespace baz;
using namespace boot;
a = 42; // error: reference to 'a' is ambiguous
}
Попробуйте здесь ; сравните это с случаем, который на самом деле имеет неоднозначный вызов функции ; обратите внимание, что сообщение об ошибке такое же, как в вашем случае, в частности, ссылаясь на неоднозначность самого имени, а не на вызов функции.