Preguntas etiquetadas con template-specialization

4
¿Por qué la plantilla de funciones no se puede especializar parcialmente?
Sé que la especificación del lenguaje prohíbe la especialización parcial de la plantilla de función. Me gustaría saber la razón por la que lo prohíbe. ¿No son útiles? template<typename T, typename U> void f() {} //allowed! template<> void f<int, char>() {} //allowed! template<typename T> void f<char, T>() {} //not allowed! …

1
¿Es correcto Clang para rechazar el código en el que la clase anidada de una plantilla de clase se define solo a través de especializaciones?
Dada la siguiente plantilla de clase: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; Definimos Innerpor separado para cada especialización de Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; y luego defina la función miembro funa vez para todas las especializaciones de Outer: auto Outer<T>::f(Inner) …

1
inconsistencia de clang / gcc en la especialización de clase
Encontré este problema al intentar especializar tuple_size/ tuple_elementpara una clase personalizada en C ++ 17 para el enlace estructurado. El siguiente código se compila en GCC, pero no en clang (ambas versiones troncales, ver el enlace a continuación). #include <type_traits> template<typename T, typename... Ts> using sfinae_t = T; template<typename T, …


1
Especialización basada en validez de tamaño de matriz
Tratando de especializarse en función de la validez del tamaño de la matriz: // base template template<int p, typename T = void> struct absolute { operator int () const { return 0; } }; // positive case template template<int p> struct absolute<p, typename std::void_t<int[p]>> { operator int () const { …

2
¿Por qué una especialización de plantilla de clase parcial en una clase de plantilla coincidente es ambigua con otra especialización parcial sin la coincidencia de plantilla?
La pregunta puede ser demasiado difícil de describir en una oración del título, pero aquí hay un ejemplo mínimo: #include <iostream> #include <type_traits> template <class T, class U, class Enabler> struct my_trait : std::false_type {}; template <class T, class U> struct my_trait<T, U, std::enable_if_t<std::is_same<T, U>::value>> : std::true_type {}; template <class …
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.