Tipo di std::array
è:
template<
class T,
std::size_t N
> struct array;
quando si inizializza il parametro secondo modello con -1
, è implicitamente convertito in un valore molto grande come std::size_t
è unsigned
(che è illegale in C++ come sottolineato dal other answer e dovrebbe essere diagnosticato).
Un'altra possibilità è che il tuo arr
sia ottimizzato. È possibile confermare questo aggiungendo il flag -fdump-tree-optimized
alla riga di comando gcc.
Se si garantisce arr
non è ottimizzato fuori, spero che si dovrebbe ottenere il following warning:
prog.cpp:5:25: error: size of variable 'arr' is too large
std::array<int, -1> arr;
fonte
2016-05-18 04:41:01
quale compilatore si sta utilizzando? Ho usato gcc 5.3.1 e ho ottenuto l'errore 'la dimensione della variabile' arr 'è troppo grande' –