<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/87406>87406</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
poor diagnostic on invalid format string inside a lambda
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
janwilmans
</td>
</tr>
</table>
<pre>
I know I'm using {fmt} here in the example but that is for the sake of comparison, the diagnostic is similarly bad with std::format, see the second godbolt link at the botton for an {fmt}-free example.
```
#include <fmt/core.h>
#include <string>
#include <functional>
// std::string example()
// {
// return fmt::format("{.3}\n", 0);
// }
std::function<std::string()> example = []
{
return fmt::format("{.3}\n", 0);
};
int main()
{
return example().size();
}
```
when the format-string is invalid inside the lamdba, the diagnostic is very confusing. I can understand why, and I'm sure anything can be done about it, however, it seems to me that the error-handling strategy used in {fmt} is not working anymore in later versions of clang.
[godbolt link](https://cppcoach.godbolt.org/z/crnevsWeK) using {fmt} as an example of the `throw_format_error("invalid format string");` being displayed.
[godbolt link](https://cppcoach.godbolt.org/z/qTYf7accE) using std::format showing that inside a lamdba the std::format diagnostic is very poor
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVUFv6zYM_jXyhajhSGmcHHxomgYodh0w7PRAW7StV1nKJLle3q8fJDsvSZed9opCkUKK-kh-H4Peq84QVex5z54PGY6ht676jmZSekDjs9rKc_UOH8ZO8M54OcDolemAlft2CKw8QE-OQBkIPQH9jcNJE9RjgNBjAOWhtS7ZPH4Q2BYaO5zQKW8N46_JIhV2xvqgmujv1aA0On2GGiVMKvTgg2TihYmX1roBQ7znieao1FgjobOytjqAVuYDMCRTbUOwJr2P5gr4qXX0E2nOigMrXpZ1Uyz_85ELZRo9SgImXuNlfmyso7xn4u2Riw9Ome4_jO1omqCsQX11WNyOjB-vOc5RLgAZ3zK-u_Nk5f7uHP8chdEZiCDvCrVlnLNynwtWHtjzq4lH_gpFjCn2X8IebmFda74ATwneYVywibeffWfiADOVllAXqP8bY3m47tOqTIABlbkr0IPn7uqYe_XjUtLb0A_bn9app5naM9qnpTvKgzKfqJUEZbySMxk1DrLGx7T-JHeGxpo26SeHd2jQwGgkOR_QSJj6c7wZt7PQ_OgI0JxDH1-M3jWBtIYAazsGUEkIvZ3ok1zcqhBlMXgIFgaaBZhU6Zx1Tz0aqWMkHxwG6s4weorwb7SsPBgbYLLuI3qiOQ92VrfGQC4m4ZU1PulYo-nu9fO8v9VhZAHf9iGcfGx4YllzOjUWmz5fHHPrOsaPP6LJGfr0f9BvjO_-NWTQRw1faGbblBfbFKF3dvo29-ZbynPm06U5swUufOVL4zcF1BRfkMqfNJ5J5r8ihb9-_7MtsWneril8GV3gezvF7-fpOFMHF-LMA-3LhQcsOlnrYMabyUrIndhhRtWqXPFiu1uv1llfSeJbUZe0E-2aeL3bcFGLXSlEuSmobTFTFS_4ulgXnBdciHVeYttQsap3EsvVplmxdUEDKp1r_TnEJDPl_UjVtlwXm0xjTdqn3w3ODU2QjLHCz4fMVfHOUz12nq0LrXzw1yhBBU1VyuEmN2vgYc_ualRLzEanq_uGdCr0Y503dmD8GJ9ZPp5Ozn6nJo7tBM4zfkzg_wkAAP__uOwtag">