Clang no nota los parámetros de plantilla predeterminados

 C Programming >> Programación C >  >> Tags >> Clang
Clang no nota los parámetros de plantilla predeterminados

No sé quién tiene razón pero...

¿Qué hay de agregar la siguiente regla de deducción?

Example() -> Example<>;

El siguiente código se compila (C++17, obviamente) con g++ y clang++

template <class T>
class Example;

template <class T = void>
class Example {};

Example() -> Example<>;

int main() {
    Example e;
}

Teniendo en cuenta lo siguiente:

Los argumentos predeterminados disponibles para

template <class T>
class Example;

template <class T = void>
class Example {};

serán los argumentos predeterminados en la definición de Example . Las dos declaraciones anteriores serán equivalentes a tener una sola declaración como

template <class T = void>
class Example {};

que efectivamente permitirá hacer Example e .

El código original debe ser aceptado. Como solución alternativa y ya sugerida en la respuesta de max66, puede proporcionar una guía de deducción que use el argumento predeterminado

Example() -> Example<>;