<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/94935>94935</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[C++20] Call to consteval function with arguments dependent on templates does not immediate-escalate properly
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
MitalAshok
</td>
</tr>
</table>
<pre>
First example:
```c++
consteval void f(int) {}
template<typename T>
struct G {
void g() {
::f(T::fn());
}
};
```
https://godbolt.org/z/qYfs8jzon
```
<source>:6:9: error: cannot take address of consteval function 'f' outside of an immediate invocation
6 | ::f(T::fn());
| ^
<source>:1:16: note: declared here
1 | consteval void f(int) {}
| ^
```
Second example:
```c++
consteval void f(int) {}
template<typename T>
void g() {
auto l = []{
::f(T::fn());
};
}
struct Y {
static int fn();
};
template void g<Y>();
```
https://godbolt.org/z/zrsEqPa5s
```
<source>:6:9: error: call to consteval function 'f' is not a constant expression
6 | ::f(T::fn());
| ^
<source>:14:15: note: in instantiation of function template specialization 'g<Y>' requested here
14 | template void g<Y>();
| ^
<source>:6:13: note: non-constexpr function 'fn' cannot be used in a constant expression
6 | ::f(T::fn());
| ^
<source>:11:16: note: declared here
11 | static int fn();
| ^
```
(`l`'s closure type's call operator should be an immediate lambda since it is an immediate-escalating function containing an immediate-escalating expression, and this should be accepted since it is never called (barring it never producing a constant expression, but that should complain about something else, and not in C++23: [P2448R2](https://wg21.link/P2448R2)))
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVk1zozgQ_TXypSspENjgAwfHHu9pq6Z255KjLLWNJkIiUuNM8uu3BP7AGXvKO3tYihAstfrzvVeIEPTOIlZs-sSmq4noqHa--lOTMItQu5fJxqn3aq19IMAfomkNsmzBkhVLjs9ZMtyS8ad496vS2UC4Fwb2TivYMl5qS4zPgRVPrFiNPRA2rRGELFvSe4tWNAjfWPZl2A3kO0nwR3-wXwGAweuO8fLoctiJuWWLGO3b4dUONvHOTlan-MXqtHqqY5xaTdSG6ImvGV_vnNo4Q4_O7xhffzC-fn3ehvL7h7NXO3L4mS2D67zEWFK2mLFsMWfZAtB75-OLFNY6AhIvCEIpjyGA28K5hdvOStLOAuPFlvECXEdBK4xWwoJuGlRaEIK2eydFND13agasWMLxuq9Bg2mxBDb9crWINP7FSsC6OLgFKJRGeFRQo8ezm7R3cx8azmE_Xecsrs3ob5TOqv8JnTdwCACiIwcGWLaCgVwXu_fP4gKjl6kdqPF8GTiQIC1BW4KTw7GD0_tFeUdGZcvnWNynY7_DjQ8fvrx-FdPw37hhDJD7FRl0iCAEMdgIG4WqjSS6QoN_Cf-fAfiJBnl8TMc80Bb0kIbuiRg5ekr51OzQotTC6A9xLOXc-QI8vnYY6JJMad6ndNe8bjHpVh2x72k2LsM6-zD0_EfrL3tuY4oHzdogdAFVrPqu_v-mDN1TQ3qvJqXpyeevqHJNBK_RIB6bJSau8iKANC50HiFqxbAQEexa9IKch1C7zqjYtwvhNqLZKAFBW4mgKWJ6vP-AQQojSNvdeRbSWRLaxrVbtqNB8CUIq4BqHcZJSIltBNo4ssU9-j5vVMB4uRHeR2-aDlutd6qTfeCrQ-dL2HQEVAs6xpIuwjbCZOM6guAapLpP0QQ8JhcRpS0sB6nmPSDZ9Okrz_PyLx4llJeXqvO24-mj0faF8fXRbAARnw_jmagqU_NsLiZYpUVaJklepOmkrpKkyItUbXleJmpa8lkqSoWSy-02FbIsJrriCc-TWZokRZZO00dMM4HZbJ5k23k-zzKWJ9gIbR6N2TdR-CY6hA6ruDmdGLFBE_oPK84tvkG_yXisY-KreOZh0-0CyxOjA4WzF9Jk-i-yYyMSNl3B8rYSvmmqQfhd16ClAApbtAotwUhyAiiHg1L-BBWME23Rm_dJ5031Sdg11d3mUbqG8XXM8fDvofXuO0pifN1XFhhfD5XvK_5PAAAA__-uF_If">