¿Se puede pasar una plantilla variable como argumento de plantilla?

Respuestas:

3

Respuesta corta: no.

Respuesta larga: Sí, puede usar alguna indirección a través de una plantilla de clase:

template<typename T>
constexpr auto zero = T{0};

template<typename T>
struct zero_global {
    static constexpr auto value = zero<T>;
};

template<typename T, template<typename> class VariableTemplate>
constexpr auto add_one()
{
    return VariableTemplate<T>::value + T{1};
}

int main()
{
    return add_one<int, zero_global>();
}

Ejemplo en vivo

Racicot Guillaume
fuente
Parece un poco al revés que uno tiene que recurrir a la estructura con un miembro estático. ¿Es esto algo que uno puede esperar que venga con un estándar futuro? ¿Alguna idea de por qué ya no es posible hoy?
idclev 463035818
1
@ formerlyknownas_463035818 No creo que nadie lo haya propuesto todavía (nunca lo vi en el periódico, ¿tal vez me lo perdí?) Y también hay una complejidad. En este momento, los parámetros de plantilla que no son de tipo son valores pr. ¿Pero qué value<T>significaría? ¿Una referencia a la variable global? Además, no puede ODR usar parámetros de plantilla que no sean de tipo, pero puede hacerlo con una plantilla global.
Guillaume Racicot
gracias por las sugerencias, todavía estoy en c ++ 11, así que no estoy muy familiarizado con las plantillas variables, y eso es algo que hubiera esperado que saliera de la caja
idclev 463035818