Tratando de tipear la alineación de mi memoria, salí con la siguiente construcción (que todavía está un poco en progreso porque necesito corregirla) la versión de GNU):error de plantilla: sin tipo ".. [con T = T] no es un nombre de tipo"
#if defined(__GNUG__)
template <typename T>
struct sfo_type {
typedef T* restrict __attribute__((aligned(32))) aptr32;
};
#elif defined(__INTEL_COMPILER)
template <typename T>
struct sfo_type {
typedef T* restrict __attribute__((aligned(32))) aptr32;
};
#endif
y luego trato de utilizar de esta manera:
template<typename T>
class tsfo_vector {
private:
sfo_type<T>::aptr32 m_data;
int m_size;
...
pero luego me sale el siguiente mensaje de error:
/Users/bravegag/code/fastcode_project/code/src/sfo_vector.h(43): error: nontype "sfo_type<T>::aptr32 [with T=T]" is not a type name
sfo_type<T>::aptr32 m_data;
^
¿Alguien puede aconsejar qué está mal aquí?
Niza, gracias! Estoy realmente desconcertado por este ... ¿cómo es que un miembro de datos tiene que tener un marcador typedef al frente para compilar? es un poco raro. –
@GiovanniAzua, la respuesta vinculada explica el uso de 'typename' mucho mejor que pude. – hmjd
@GiovanniAzua: No es el miembro de datos, pero su tipo tiene el prefijo 'typedef'. – celtschk