V>В тестовых примерах у меня сейчас все компилируется, а вот в рабочем коде у меня постоянное срабатывает перегрузка оператора & для A<size> при использовании Enum-а, хотя должно разрешаться с помощью ADL.
V>во — воспроизвел пример
Во-первых, ADL тут вообще не причем. Чтобы было ADL, твоя функция должна жить в том же пространстве имен, что и тип. А у тебя ничего такого и в помине нет — тип живет в глобальном пространстве, функция в impl.
Во-вторых, ты, как мне кажется, не вполне понимаешь механизм работы using-директивы. В твоем случае, она работает как если бы твой оператор & для перечислений находился в глобальном пространстве имен.
В-третьих, в результате всего этого имеем горький катаклизм — в глобальном пространстве имен имеется подходящий оператор &, но в локальном пространстве имен (my) тоже имеется оператор &, и как только компилятор его находит, поиск прекращается. Вариантов исправления на самом деле много, зависит от того, что в конечном итоге тебе надо.
Простейший вариант — вместо using namespace impl делать using impl::operator&. Но в рабочем коде я не уверен, что это то, что тебе надо.