[libcxx-dev] Unqualified name use causes ambiguity through ADL
Eric Fiselier via libcxx-dev
libcxx-dev at lists.llvm.org
Fri Oct 11 18:28:47 PDT 2019
On Wed, Oct 9, 2019, 12:40 AM Marcin Zalewski via libcxx-dev <
libcxx-dev at lists.llvm.org> wrote:
> I have a library that redefines forward_as_tuple in its namespace, along
> with some concrete types. This causes the problem with the following code:
> Here, forward_as_tuple is being called unqualified, and ADL kicks in. ADL
> finds the definition of forward_as_tuple in the library that I am using,
> and I get ambiguity.
> It definitely can be argued that the library I am using makes a dangerous
> choice by sticking concrete types into the same namespace as the template
> forward_as_tuple, but it does. My question is why libc++ calls
> forward_as_tuple unqualified rather than std::forward_as_tuple. Is this a
> bug, or is there a good reason for this?
This is a bug in libc++.
Apart from customization points like `swap`, libc++ should never use ADL,
even when calling functions with reserved names.
I'm working on a Clang tool to clean up ADL-using call expressions. I'll
run it over libc++
> libcxx-dev mailing list
> libcxx-dev at lists.llvm.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the libcxx-dev