разве нет?
«Names introduced by friend declarations within a non-local class X become members of the innermost enclosing namespace of X, but they do not become visible to lookup (neither unqualified nor qualified) unless a matching declaration is provided at namespace scope, either before or after the class definition. Such name may be found through ADL which considers both namespaces and classes.»
честно говоря, не понимаю почему пример не работал. operator| попадает в глобальный namespace, а так как enum лежит в глобальном неймспейсе, то мы его там по ADL должны найти. Где моя логика неправа?
В глобальном неймспейсе ADL не работает
Так это уже не ADL
логично :)
Для аргументов это если что ни на что не повлияет
но всё же не в глобальном нэймспейсе проблема https://godbolt.org/z/GEcPrvWTc
а в том, куда ADL смотрит и где лежит friend. Но я что-то не понимаю эти правила
Обсуждают сегодня