[libcxx-dev] Unqualified name use causes ambiguity through ADL

Marcin Zalewski via libcxx-dev libcxx-dev at lists.llvm.org
Tue Oct 8 21:39:31 PDT 2019


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:

https://github.com/llvm/llvm-project/blob/master/libcxx/include/tuple#L1352
https://github.com/llvm/llvm-project/blob/master/libcxx/include/tuple#L1367

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?

Thanks,
Marcin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/libcxx-dev/attachments/20191008/f07c0ca1/attachment.html>


More information about the libcxx-dev mailing list