<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/76366>76366</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Wrong lookup handling in range-for loops
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Fedr
</td>
</tr>
</table>
<pre>
This program
```
#include <vector>
namespace ns {
template <typename T>
constexpr auto operator*(T&& /*value*/) {
struct custom_type {};
return custom_type{};
};
} // namespace ns
template <typename T>
constexpr void foo() {
std::vector<T> vec{};
for (const auto& curr : vec) {
static_assert(std::is_same_v<const T&, decltype(curr)>);
}
}
int main() {
using namespace ns;
foo<int>();
}
```
is ok in GCC and MSVC, but fails in Clang:
```
error: static assertion failed due to requirement 'std::is_same_v<const int &, const custom_type &>'
```
Note `custom_type` type that cames from `ns::operator*` and it should be impossible to find in `foo()` by any form of lookup.
Online demo: https://godbolt.org/z/qds8qo4cK
Related discussion: https://stackoverflow.com/q/77712202/7325599
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyclE1v4zYQhn8NfRkkUEhbHwcdvE7dQ9EWaIP2GFDkWGZDcRR-eJv--oK0N5FTo4cFDFnWzLwz7-OhZAhmdIg923xhm8eVTPFIvt-j9quB9Fv_dDQBZk-jlxOrHlm1ZXV1-Zx_cmGcskkjMLE7oYrkmfjhEixXJycMs1QILgBrvixjEafZyliK49uMORee3gUUuRDx79mDTJGAZvQyN-BbxtsnxmvGa2B8z_j2JG3CEtgz3n30AQAI0ScVQaUQaXrOfUq8eWRikeUxJu-WWZ-Sru6_PYFz_z0sbX6XxRMZDQcixtsbDjQTWya23wjvsgKcUN0wciAPjLdFuYDLlFTyHpjYlprP8ucWMhr1LENAHxlv31ua8BzkhM8nJnZnzTP5HWhUtnDibZZnvMu28nWhnad7x7fgYlyESRp3y24Kxo3XRK8NEhM742Jp1y47fjS53lMTgF7AOPhxtwPpNPz8-x-77GFIEQ7S2JCDOyvdmF3fkkDvM_nthRScSRlypR416IQQCTy-JuNxQheB8eZ_OJqSUVCeH1xtKK-LvebmML9Q3qi6Wm5rXUGpjEcZQWV4cPA0Qc7LBPMQyyNUV4WEiRCOlKyGAcFMM4VgBlusHEyOuyzwvpi5bHgD6d7yok1AB7BEL2m-X_67vzprHILGiTKyY4xzmaCclZH0QDbekx8Z3__D-P5Vh_aV1uqnpcZvmM-NBm2CSiEYcv-VClGqFzqhP1j6eq9oymKM75umeeC84vlW8M2m61a6F7oTnVxh_9BUYsM70VWrY69btWnVemjadaPXGjVv6robsK7atRi0WJmeV1w8cL55aEUtqns8dBtct-2mOVRrrlq2rnCSxt5be5qyq5UJIWHf1KKuV1YOaEN5xXLu8CuUIOM8v3F9n2vuhjQGtq6sCTF8qEQTLfZ_enLjhTEcpdM2Hw7jwEs34l0-7ZZoDqvkbf8JtInHNFywZNnL193s6S9UkfF9GSZkTHnYfwMAAP__TETMcw">