Re[3]: Перегрузка operator&
От: Vamp Россия  
Дата: 08.02.19 14:30
Оценка:
V>В тестовых примерах у меня сейчас все компилируется, а вот в рабочем коде у меня постоянное срабатывает перегрузка оператора & для A<size> при использовании Enum-а, хотя должно разрешаться с помощью ADL.
V>во — воспроизвел пример

Во-первых, ADL тут вообще не причем. Чтобы было ADL, твоя функция должна жить в том же пространстве имен, что и тип. А у тебя ничего такого и в помине нет — тип живет в глобальном пространстве, функция в impl.

Во-вторых, ты, как мне кажется, не вполне понимаешь механизм работы using-директивы. В твоем случае, она работает как если бы твой оператор & для перечислений находился в глобальном пространстве имен.

В-третьих, в результате всего этого имеем горький катаклизм — в глобальном пространстве имен имеется подходящий оператор &, но в локальном пространстве имен (my) тоже имеется оператор &, и как только компилятор его находит, поиск прекращается. Вариантов исправления на самом деле много, зависит от того, что в конечном итоге тебе надо.

Простейший вариант — вместо using namespace impl делать using impl::operator&. Но в рабочем коде я не уверен, что это то, что тебе надо.
Да здравствует мыло душистое и веревка пушистая.
Отредактировано 08.02.2019 14:31 Vamp . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.