Najsilniejszy przypadek użycia ADL dotyczy takich przypadków.
namespace A
{
struct S {};
S operator+(const S&, const S&);
}
namespace B
{
A::S test()
{
A::S a, b;
return a + b;
}
}
Jest także przydatny dla wyboru właściwego swap
funkcji w kodzie generycznych, dlatego nie powinno się stosować tylko do operator
funkcji. Jest to już dość złożona część normy, dzięki czemu zasady, które uniemożliwiły jej działanie w niektórych przypadkach, mogłyby zwiększyć stopień złożoności, a jaki byłby zysk?
Nie mogę wymyślić żadnego zgrabnego sposobu żądania jawnie tego, który byłby znacznie mniej gadatliwy niż wywoływanie funkcji w innej przestrzeni nazw bezpośrednio i, w każdym przypadku, czyni wyrażenia bardziej złożonymi.
Mamy na myśli coś takiego: return [[ use_adl ]] (a + b);
vs. return A::operator+(a, b);
?
Nigdy o tym nie myślałem. Więc nawet ja chcę to wiedzieć. Dobre pytanie! – Nawaz