На самом деле, нет никакого порядка среди пространств имен для ADL. Все соответствующие пространства имен просматриваются, и все найденные функции образуют набор кандидатов для разрешения перегрузки.
Также обратите внимание, что в отличие от того, что вы говорите в вопросе, ADL выполняется, даже если функция равна, найденной по неквалифицированному поиску в области вызова. Объединение неквалифицированного поиска и ADL затем используется для поиска лучшей перегрузки.
ADL подавляется только в том случае, если неквалифицированный поиск в области вызовов находит член класса, нефункцио- нальную или неинформационную область, а не using
.
Соответствующие правила приведены в C++ 14 3.4.2 [basic.lookup.argdep]. Цитирование N4140, жирный курсив мой:
-Пусть Х быть поиск производится множество неквалифицированного поиска (3.4.1) и пусть У быть поиск производится множество аргумента зависимого поиска (определяются следующим образом). Если Х содержит
- декларацию члена класса или
- объявление функции блока-сферы, которая не является использованием декларация, или
- декларацию, которая не является ни функция или функция шаблон
then Y пусто. В противном случае Y - это набор деклараций, найденных в пространствах имен, связанных с типами аргументов , как описано ниже. Набор объявлений, найденных при поиске имени, представляет собой объединение X и Y.