unción @constexpr con argumento de referencia no utilizado - gcc vs clang

Considere el siguiente código:

template <int N, typename T> void f(T) { }

template <typename T> 
constexpr int k(T&) { return 0; }

int main() 
{
    constexpr auto i = 1;
    f<k(i)>([&i]
    {
         f<k(i)>(0); 
    });
}

clang++ (el maletero lo compila. @g++ (el maletero falla con el siguiente error:

<source>: In lambda function:

<source>:11:19: error: no matching function for call to 'f<k<const int>((* & i))>(int)'
11  |          f<k(i)>(0);
    |                   ^

<source>:1:35: note: candidate: 'template<int N, class T> void f(T)'
    1 | template <int N, typename T> void f(T) { }
      |                                   ^

<source>:1:35: note:   template argument deduction/substitution failed:

<source>:11:19: error: '__closure' is not a constant expression
11  |          f<k(i)>(0);
    |                   ^

<source>:11:13: note: in template argument for type 'int'
11  |          f<k(i)>(0);
    |            ~^~~

live ejemplo en godbolt.org

Cambiandok(T&) ak(T) resuelve el problema. Me parece que el problema está relacionado con el hecho de que el argumento de referencia no es un expresión constante, pero no se usa como parte dek.

¿Qué compilador es correcto aquí?

Respuestas a la pregunta(3)

Su respuesta a la pregunta