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

    <tr>
        <th>Summary</th>
        <td>
            clang 15.0.0: Template type deduction fails in C++20 mode
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          pkl97
      </td>
    </tr>
</table>

<pre>
    The following code fails to compile with clang 15.0.0 in C++20 mode:
```c++
#include <list>
#include <memory>
#include <string>

template<typename T, typename S>
std::list<T> mapType(const std::list<S>& /*p_values*/, const std::function<T (const S&)>& /*p_map*/)
{
    return std::list<T>();
}

int main()
{
    std::list<std::string> sourceList;
    std::list<std::shared_ptr<std::string>> targetList=mapType<std::shared_ptr<std::string>,std::string>(sourceList,&std::make_shared<std::string,const std::string&>);
    return 0;
}
```
This error occurs:
```
[user@host]$ clang++ -std=c++20 -Wall -Wextra main.cpp
main.cpp:14:56: error: no matching function for call to 'mapType'
    std::list<std::shared_ptr<std::string>> targetList=mapType<std::shared_ptr<std::string>,std::string>(sourceList,&std::make_shared<std::string,const std::string&>);
                                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:6:14: note: candidate function template not viable: no overload of 'make_shared' matching 'const std::function<shared_ptr<string> (const string &)>' for 2nd argument
std::list<T> mapType(const std::list<S>& p_values, const std::function<T (const S&)>& p_map)
             ^
2 warnings and 1 error generated.
```

However the code compiles fine with clang 15.0.0 in C++17 mode (-std=c++17), clang 11.0.1 in C++20 mode and with Visual Studio 2019 19.11.18 (cl 19.29) also in C++20 mode. Could this be a bug in the compiler frontend or am I missing something?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlVl2PozYU_TXk5WoQNgTCAw_ZZKNW6ttE7ePIASe4a2xkm5nOv--1-chskq3aVR9W2ggRrj8O514fH3PSzXt1bDmctZT6TagL1LrBkAlpwWmMul5IDm_CtVBLhgPIOk7iBISCXUQ_4UUT6HBSlG6jZB8l2yhPxqse-6dWmgpVywHRo3QnhXVR-vlRV8c7bd6_0WmdQZLXznB3vOslc8hg5957rljH4RjRHSzR8zLDusYTTbcjg90Re6Bj_RGHRnRTa2Ud3A4K02kOET1EdNu_vDI5cIuPoWEHN7POg6qd0MrDwwL6jAgRLW-g8NUzTjnlVEwVA_wZ7gaj7ggdA8omwM31LfYfayKUw7SEmkbdI99CLvFSYrB6MDX_LfT_q5ktM7x56Z15iOchHTMX7kbI_Vz2_wBBHzZuPjClqMp8GdSxL_xlBH0ASHc3Kze35wG2_CrtaSmSBxWfBT-Gx1ZY4MZoA7quB2Pvd8YUrj8NlpsoS1qNzNf7iGbjJhs3DjwFYvt62WdPfzAp8c7_coaF9Y3rvh_Rlijdkgxva0xiO_LwD0rjeFe3fo_PAsVtb6D2kLjVI1os-6D46Vf7O37R-nNU_GDXrTLyWR2oB2-YW1x-1YgG3fOqitlP_Rh4Fewk-aQg_cqN1KwBfR71cq03La76wuDblniz6LPZfDBfM2IsblkEnVLVAOpp6Lhy_4OXX138u_x7cu7ygWK8DkIrhTdmFCZjAYsMZDKFC1fcYHmb-LErhPsv-o1jscHh4RyO5OkktnAW6p_PY1KE89gz_9pASOEJ-3zHiQQnkvuDPJANL_hd2IFJeHZDIzTQhJRAyhjnkU2oi_ShhyyBSavvoWLY6UE2mAVa4gmR4TRc_LAxrZCRgbPRynF8KRaHdfArdMJarwGrO-7aIJDDilckz9OMJHS9XjVV2pRpyVZOOMmrj5XwUj3OCvZfANDwZpj8LnzX3NFcDUZWrXN9sGp_Fh8umP9wipEjBlK-zn9PvdF_8hqd54Akg34O66Ioi1VbJXlCClYnPMtOvKSk3LCkaRhNeZbmeUZWkp24tBX6Ppr9SlQ0oTQpSYE5ZUieZUWaZSWpSVFs0mSDBwPHvStj_-JYm8vKVIEDFtFip1e0vXYyLNpFcT7js8G12lT9F4nsAtkqMP0bQlDmGQ">