2015-07-02 16 views

risposta

23

a non è un tipo, quindi non è possibile applicare :: ad esso. È possibile utilizzare per recuperare decltype tipo s' a:

std::array<int, 1> a; 
std::array<decltype(a)::value_type, 1> a2; 
+0

Buona presa, '+ 1' da me. – sbi

1

Quentin vi ha dato un modo per aggirare questo. Ecco altri due.

La soluzione più ovvia, naturalmente, è quello di sostituire il nome dell'oggetto a con il nome del suo tipo:

std::array<typename std::array<int, 1>::value_type, 1> a2; 

Tuttavia, guardando il codice, mi sono chiesto se ciò che si voleva è quello di definire tipi, anziché oggetti. Penso a e a2 faccio nomi di tipo eccezionalmente avverse (quindi il mio sospetto era probabilmente sbagliato), ma qui si va:

typedef std::array<int, 1> a; 
typedef std::array<typename a::value_type, 1> a2; 

È ora possibile creare istanze di quei tipi.

Problemi correlati