<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/129083>129083</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
std::source_location::function_name is ambiguous with function local types
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
bebuch
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/4jx1dxE3E
```cpp
#include <iostream>
#include <source_location>
template <typename T>
auto PrettyName() -> char const* {
return std::source_location::current().function_name();
}
void normal() {
struct A{};
std::cout << "normal: " << PrettyName<A>() << '\n';
}
struct A;
int main() {
auto lambda = []{
struct A{};
std::cout << "lambda: " << PrettyName<A>() << '\n';
};
std::cout << "global: " << PrettyName<A>() << '\n';
normal();
lambda();
}
```
clang output:
````none
global: const char *PrettyName() [T = A]
normal: const char *PrettyName() [T = A]
lambda: const char *PrettyName() [T = A]
```
The GCC output is not ambiguous:
```none
global: const char* PrettyName() [with T = A]
normal: const char* PrettyName() [with T = normal()::A]
lambda: const char* PrettyName() [with T = main()::<lambda()>::A]
```
I think it might be an good idea to change `__PRETTY_FUNCTION__` output for function local types to something similar of what GCC does. Its annoying to look into a log file and see a type that exists globally while another function locale type was used. Thats pretty hard to debug.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykVUtv4zYQ_jX0ZbAGTVmWfdBBcewil3RRuIeeDEocS9ylSEMcxnF_fUHJjyoJsrtYQIDAx8z3ffPgSO91bRFzlj6w9HEiAzWuy0ssQ9VMSqfOeUN09CwpmNgysa2dKp2hqetqJrb_MrGdf3udqddNsmG8iN-CD191PMalSLStTFAILFlr56lD2bLh9ujMu9BVuDeukqSdZVeHhO3RSOrv0PmIVrYIu-FYBnLwtUOi87NskYklEyv4wpINVI3soHLWExMFsOyB8QIAoEMKnQVPKmpKinewcbMKXYeWBn_TQ7BVPNvbGwZLoj-WPQ4cX5xWYF3XSnPhcAH01IWKoIjL7HGwiixu8JULFJWxZA1MiIuPpIiL6_7_BCbrIiq_YFzNMpaubfyNWd3Ah21eaEvQSm3HHAGgj6ORbakksOQRhmq4nw-UP5bymZzB5e_JgRvaD2JXG1f-buxGSbxrvOh4n_prsQ_sKiNtDS7QMVCkOG4ItuDWWWS8uDPtC3SoVSaKd5XM0oddn5AipoMX9_L4RcN7In7R8I3CXYPwx3p90Qjag3UEsi11HVzw70V_ojj25Uf4J00N_FD2T1iPcxkr5pNo_IS_e-sM3liyHhfGZoTyJnRPQI2230ETtLpuCEoEaaF2ToFWKIFcJGJrBLbg-_3Xvza73T_77d_P693Tn8_7PVvwa9wProPrqwTx6TIQn0YffXjXYkSqwetWG9mBO8CpkdQnTjn0U3giD9Jad47XYus79x20JQcSjKvhoE0kp8Ajgux9A0UX-Ko9eRjSac5waoabjhp8SwkHu5P0EDyqKewaSR6OfZChkZ2K0ArLUE8nKk_UKlnJCeazbM4XWZrxdNLkq-VsdThU1XK-kmnG58n8kC1TXEheVgpLnOhccJFyIbJZxmdzPuVzVSlMD8lBLhdilbA5x1ZqMzXmpY1za6K9D5jPxIovk4mRJRrfzz8hLJ6gP2VCxHHY5dHoSxlqz-bcRO13N6TJYP75IBmNjtgut1aBvrA-SuIkdObt1NXUhHJauZaJbSRw-X05du4bVsTEtqftmdhedL3k4r8AAAD__yBEVC4">