<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=http://email.email.llvm.org/c/eJzNVk1v4zgM_TXOhVjDkZs4OfjQbVqgtwU6wB4D2WZs7cqSVx9J8--XkuO2STOZGcwssIag2BFFkY-PpCrdHMuE5TTgD6MriX2SbZLsfpy_dAg7LaU-CNVCrRuEFhUa7tACV4DGaAM9WstbBNdxB8KC0g7wdTD0t9gjoNK-7dKPepNlNo46Yb-HMf7LcqFq6emUJH_wTkjhjkn--HGndcbXDl5O_xXT1my916IBPQTjtEnYKmFrml8StoxjneSTbLF5f4-zw36Q5BOd6o4DKt4jPCXsAaavNE3h3rT2zZhaqxoHBw9cSk6o_SlcR0ZvwOA_XpDnn-2zrknyexoN1nLPJR32FPRNll5Zn46MImTDbS8SRjY_AcXMIvSi7RxUGKIkyDvsUTnuhFbQoONCgt4Bp5AJ08DAjTuCFJXh5ph-HZMvZAx4G7iw46o-bsPK1hmu7E6bPqrfuohDxH2y7xu6bNDQ4vdqG2ehHPRcqBN-n-A-ofH4OmDtMEALj2dstZ32sgHLj3AIxKXN0SmK-8kggvgrNlGAtdyT1ovT3h-n08vFZ2s9BjvoeXbQaIypkn5gCOmvt9xaNC749aYgW38kGsH4cSnuvIEgiRNYkUeX-25E8X1X2HjOu2uZPBUMyn8ajgrHWXEI1L624YTklps2DeFM69dXkg3hvmcBrKglvJyhQ_wTcsJ_wvw6ftNqsni8fWRBUx5OoqDEOFVYc0-5lLDiAv7vxvtWnrzJQZQtACnrPaVJQ-yhjdLiuQfTc5ULl0Lfcnc-nxC-4u4vqlXk0yEmGdUhoUhONOOBlLmu7mId8aqOVYmAgZocC77r6i9K2lChAnDBICoAxWWwf2k5_QTb_MTfqd816VX-PqtYPUXtJTeR9lIo_CGq_295d2H_VLDoHkCtRChqLUcK65tm4JX2biymVAKsHwZtR6UU_xBb-uCqgUNolkEshRcNIkoPhhMPgtCRugJKqhrnN4bxjrJBS901EKrje6G9GVdfdI-HDg21O6mJVVMcSG3oE5aWXaSbFH__Z8EZrxoPp2b1I8jOmjJv1vmaz7h3nTal032lsevRzLyRZefcYAObYyNp6ThfpbXu6UPK_fTz22B0yBv6FKHVWHpZ5DlbzrqSNbt8sVoWbL1gTb4q8iXiXdGs8nmW3fHVYkaOoLRlsqDrGFN4gKiC3pPFZvbzFoiSZYxl8zDn2TxPGR2_3DUFXy5qzqssucuQcJdp0JNq085MGVVWnpL2LpPCOvu-SDVetAoxGkwWOuEklk8-0OcUSrrdnG5poaABBdaHOxC1p4t7q01n0doymvovkA1lUA>53326</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Fully resolve a concept's arguments in error messages.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tomboehmer
</td>
</tr>
</table>
<pre>
## Problem
The following code generates an error message that is not expressive enough.
```c++
#include <utility>
struct S
{
void operator()(S&&);
};
template<typename F, typename... Args>
concept CallableWith = requires
{
std::declval<F>()(std::declval<Args>()...);
};
// These might be an implementation detail of a third party library.
template<typename T> using fancy_type_transformation_t = S&;
template<typename T> using strange_type_transformation_t = S&;
int main()
{
// Expected: Error message should say what {fancy,strange}_type_transformation_t resolved
// to.
// Issue: It does not.
static_assert(
CallableWith<
strange_type_transformation_t<int>,
fancy_type_transformation_t<int>>);
}
```
This is the error message:
```
resolve_arg.main.cxx:26:2: error: static_assert failed
static_assert(
^
resolve_arg.main.cxx:27:3: note: because 'CallableWith<strange_type_transformation_t<int>, fancy_type_transformation_t<int> >' evaluated to false
CallableWith<
^
resolve_arg.main.cxx:11:2: note: because 'std::declval<F>()(std::declval<Args>()...)' would be invalid: no matching function for call to object of type 'S'
std::declval<F>()(std::declval<Args>()...);
^
1 error generated.
```
In particular the line
```
resolve_arg.main.cxx:27:3: note: because 'CallableWith<strange_type_transformation_t<int>, fancy_type_transformation_t<int> >' evaluated to false
```
does not contain any information about what is supposed to be called and with what. So it is practically useless.
## Desired behaviour
Somewhere along the line print something like
```
resolve_arg.main.cxx:27:3: note: because 'CallableWith<S&, S&>' evaluated to false
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNVkuP4zYM_jXOhajhyHlsDj5MJzPA3ArMAj0GssXYamXJ1SOZ_PtSSjyTZLLZXWAL1BAUO6Io8uNHUrURhypjJQ34w5paYZ8V66x4OM5fO4StUcrspW6hMQKhRY2We3TANaC1xkKPzvEWwXfcg3SgjQd8Gyz9LXcIqE1ou_xcb7YojqPJ2O9xHP9lpdSNCnRKVj4GL5X0h6x8Ot_pvA2Nh9fTf8txa7HaGSnADNE4YzP2JWMrml8ztkhjlZWj7HL98Z5mj_2gyCc61R8G1LxHeM7YI4xfeZ7Dg23duzGN0Q0OHh65UpxQ-1P6joxeg8V_giTPP9vnvMjKBxoCG7Xjig57jvpGS2-sj0cmEbLhvhcZI5ufgWLmEHrZdh5qjFGS5B32qD330mgQ6LlUYLbAKWTSChi49QdQsrbcHvJvY_KVjIHgIhe2XDeHTVzZeMu12xrbJ_Ubn3BIuI_2fUeXixpa_FFtx1lqDz2X-oTfJ7hPaDy9Ddh4jNDC0wVbXWeCEuD4AfaRuLQ5OUVxPxlEEH_DJgqwUTvSenXax-NNfr344lzAaAc9Lx6EwZQq-RlDSH-z4c6h9dGvdwXF6pxoBOP5Utp5B0ESJ7ASj6733Ynix6648ZJ3tzJ5LBiU_zQ8FY6L4hCpfWvDCckNt20ew5k3b28kG8P9wCJYSUt8uUCH-CfViP-I-W38xtVs_nT_yCVNZTyJgpLiVGPDA-VSxpZX8P8w3vfy5F0OkuwSkLI-UJoIYg9tVA4vPRifm1y4Fvqeu9PpiPANd39RrSKf9inJqA5JTXJSHA-kzPVNl-pI0E2qSgQMNORY9N3Uf1HSxgoVgYsGUQFYXgf7l5bTT7BNT_wd-53Ib_L3RafqKZuguE20V1LjT1H9f8u7K_vHgkX3AGolUlNrOVBY3zUDr03wx2JKJcCFYTDuqJTiH2NLH1wL2MdmGcVyeDUgk_RgOfEgCh2oK6CiqnF5YzjeUdboqLtGQnV8J02wx9VX0-O-Q0vtThli1RgHUhv7hKNln-im5N__WXCOV43HU7P6GWQnoirFqlzxiZdeYfUcIgwnk6hLn24bMTGBDAyxl1OZvbp_uXwSrKo67wcXqZ-6Tku2hTpvTE8fSu3Gn98Ga2KS0aeMfcnRy7ws2WLSVVO2Wsx5wWsUgk9n861gxfILE4tZXdY4ZRPyGpWrsjnd3ZjGPSQV9J7N1xNZsYKxYhrnspiWOcPZcrEVS76YN5zXRTYrkCBWebQjN7ad2CqZVAfKz1mhpPPuY5HKuWw1YjqO9PPgO2Mrb_raYNejnaTTq2T9vz0aUNo">