template c++ templates language-lawyer auto c++17

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 ...