<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/122287>122287</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Incorrect "invalid conversion" error with decltype(<lambda>) in default template arguments
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:frontend
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ilya-biryukov
      </td>
    </tr>
</table>

<pre>
    The following code fails to compile (see https://godbolt.org/z/zTf49f9oe):
```cpp
template <typename MakeValue = decltype([] { return 1; })>
class Example {
   public:
    using Result = decltype(MakeValue()());
    explicit Example(MakeValue&& make_value = {})
 : make_value_(make_value) {}

    Result Make() { return make_value_(); }

   private:
     MakeValue make_value_;
};

template <typename CastTo = int>
CastTo CastResultTo() {
    auto example = Example();
    return example.Make(); // error: 'Cannot initialize object parameter'
}

int main() { return CastResultTo(); }
```

Adding an empty template argument list makes the error go away (see https://godbolt.org/z/dz7eMaM54):
```cpp
    auto example = Example<>();
```

So this seems to be related to deduction guides somehow. Could it be that we synthesize a new lambda type for CTAD and happen to mix it with types that we also creates during substitution?

cc @hokein who recently worked on CTAD, in case he has any ideas.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVE9v6jgQ_zTmMnoodQiQQw4pfUh76GW32uvTxB6It44d2RMo_fQrJ6HQVm-1EhCSeOb3Z342xmiOjqgSxaMonhY4cOtDZewFfzQmXIZXf1o0Xl-ql5bg4K31Z-OOoLwmOKCxEdiD8l1vLIGQ20gELXMfRV4LuRdyf_S68ZaXPhyF3L-n78thVR5KT0KWaVlWi3U2fVTfi6xm6nqLTCDyHV96ctgRPOMr_Y12SE-fQJOy6ZWQ24k6iM0jBOIhOHgQ-SOIzdPY_6fIamUxRvj5hl2faG4eRVYDQD801qiJAgDAEJO2PykOlr-ifMAnRFlef0uRz82A3nprlOErzueitZBr6PCVfp0-RCQiE8usBpHXd-9_Cbm93QlZXhdnV7IzzQQxkbl34HOjiSbcl_fBnJDppv3O3_viUV0qnP78ZjY7jPziR03G8eT5_CxdJqov_sZzBsWBPdB1LPnTnXWfrJ1VzSuXN82jrDFmQCH4kEwUcrND5zyDcYYNWvNO4Jt_SDH0GLAjpiDkZhY2qjKOoUPjvjv5nf-dldfYTk1qrVN-0AF1PV_gwyoMx6Ejx2BN5NHeCNzSRBmOHvCMl_-7e_T7hp7xuVj9bvf8p7H5Lk3nzt4vGv7ywK2JEIm6cW83BIGSCp3uNOlBsfEOjoPRFCH6jlp_XsLOD1aD4VTALTKcCeLFcUsx-Y_g6AwWu0YjpNzAwQfYvdRPgE5Di31PLiF05i11ORtux3Xxoxva6EEFQqYIegjJ6zg0kQ0PiZLI95MGpUCssta_knFwbj0EUuTYXuDswytp8G5EFnIHxoHCSNAStBgB3QWMJozLha5yXeYlLqh62OTrVb4qi3LRVmW5zmi9ybXMc11mh6JcqaKRuNXrQ9ZkxcJUMpNF9pCVD0Um83K5KnSjpZbNFrVqVCFWGXVo7NLaU5cmuzAxDlQ9SCm3m4XFhmwcT2QplUV3FHl9CN4xOS2kTOd0qFLtj2Y4RrHKUqzirRsbtlT94ZQPIYVeSGncCa3RoLw7UYjJLSnn_I1W35-n-W6a05iUMlmk6YDpsPmW6LgYgq2-RNZwOzRL5Tsh94nUfPnRB582oZD7UW8Ucj9LPlXy3wAAAP__R8kNkA">