c++ - template tags django
¿Por qué, en este contexto, un parámetro de plantilla que no es de tipo no puede ser automático? (1)
Clang bug comentado por xskxzr
El fragmento más simple que logré reproducir para reproducir el problema es el siguiente:
#include <variant>
template <auto V>
using ic = std::integral_constant<decltype(V), V>;
enum { shake };
int milk(ic<shake>);
template <class...>
struct context {
template <auto V>
decltype(milk(ic<V>{})) get() {
return std::get<decltype(milk(ic<V>{}))>(value);
}
std::variant<int> value;
};
int main(){
context<int> c;
c.get<shake>();
}
Hay algo raro aquí en [clang] ya que sugiere que:
prog.cc:13:42: error: a non-type template parameter cannot have type ''auto''
return std::get<decltype(milk(ic<V>{}))>(value);
^
prog.cc:3:16: note: template parameter is declared here
template <auto V>
^
1 error generated.
Cuando cambiamos el ic
a un tipo con alias o utilizamos la versión sin context
del context
todo funciona como se espera. Entonces, ¿es realmente el error de Clang o me estoy perdiendo algo obvio aquí?
PD. En [gcc] todo funciona como se espera ...