<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/115731>115731</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Linker failure for std::visit with a templated lambda using a forward declared templated function
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
StefanPaulet
</td>
</tr>
</table>
<pre>
```cpp
#include <type_traits>
#include <variant>
using MyType = std::variant<double, int>;
template <typename T>
auto foo(T&& arg) -> std::remove_cvref_t<T>;
auto bar(MyType const& v) {
auto callable = []<typename Arg>(Arg&& arg) -> MyType {
return foo(std::forward<Arg>(arg));
};
return std::visit(callable, v);
}
template <typename T>
auto foo(T&& arg) -> std::remove_cvref_t<T> {
return arg;
}
int main() {
MyType b {5.3};
bar(b);
}
```
https://godbolt.org/z/n54f19hn5
It seems that only the declarations get generated for `foo`, but no definitions. However, if `foo` is no longer forward declared, everything works: https://godbolt.org/z/c1WY647af.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VF2PqzYQ_TXOy2gjsIGQBx72bm7USq1UqStVfVoZewD3Gjuyh6zSX18Z2Hx0b9W3i1ASwpkz5xzbI2M0vUNsWPmFlYeNnGjwofmdsJPuNzlZpE3r9aVhVbbc6nRi2YFlz4wL45SdNAITL3Q54RsFaSgy8fV7iLMMRjq6vZ0_p2hcD79eXi-nhDpAJM3EMxPPV_yL9lNrkfEXMEu9-HJPQTierKSrDCdHhNdrHzmRh857xutXxivGK5ChZ3wPT0x8vfULOPozvqlzwO4ttX393GrmamVgvF4lK-8iJc5zYmS7FQ4AMIOVtFa2dvG2hHwv8zn0qQuv04_P4j5yuadNV0CagltdXR10PrzLoJl4udIuZOkWdxRsd3h4Xulu0ZtoiPH6Q3yK_nxPkgh-0Ao8ml-VpvL_0GIcwSiNY7x-XJE1yzb9VW7FQwbLkrbft_ix85fHgegUk15-ZPzYe916S1uf_Bz_ZvzoyqLL94Mr70X9TBARxwg0SALv7AVoQNCorAySjHcReiTo0WGQhBo6H4BVWUqtylL-7UTgPGjsjDNzxRZ-8u94xjCfjO4GBxMT1HrXY4B1V6zNUCd0qrrQkI7euw_fkh_4P2Mq_-PPqtjJbrvRjdB7sZcbbPKdyEWR7UW9GZq80FjXVdspXdWIGVYqQ17mperyvMrUxjQ840Werirjeb3tFM9FJUVWaNVWxZ4VGY7S2K215zE135gYJ2zyvNyJfGNlizbOw4pzZaXrGedpboUmFTy1Ux9ZkVkTKd4oyJCdJ9xSUR7gF-O-pWiksVPAOezHzQ_vhgaQ8LGzNVg5tlrCMq_kp1TvkN3kVFqgzRRs869UDQ1Tu1V-ZPyY9K1fT6fg_0JFjB9nv5Hx42r53PB_AgAA___lD68F">