El caso de uso más fuerte para ADL es para casos como este.
namespace A
{
struct S {};
S operator+(const S&, const S&);
}
namespace B
{
A::S test()
{
A::S a, b;
return a + b;
}
}
También es útil para seleccionar la función correcta en swap
código genérico por lo que no sólo debe aplicarse a operator
funciones. Ya es una parte bastante compleja del estándar, por lo que las reglas que le impidieron trabajar en algunos casos agregarían complejidad adicional, ¿cuál sería la ganancia?
No puedo pensar en ninguna manera ordenada de preguntar explícitamente que sería mucho menos detallado que llamar directamente a una función en un espacio de nombre diferente y, en cualquier caso, hacer las expresiones más complejas.
Estamos pensando algo así como: return [[ use_adl ]] (a + b);
contra return A::operator+(a, b);
?
Nunca pensé en eso. Entonces incluso quiero saber eso. ¡Buena pregunta! – Nawaz