Sì, il comportamento è ben definito: entrambe le funzioni passeranno attraverso i movimenti per le funzioni di input/output non formattate (costruendo la sentinella, impostando failbit se è impostato l'eofbit, svuotando il flusso associato, se necessario), e poi lo faranno arrivare a questa clausola:
§27.7.2.3 [istream.unformatted]/30
personaggi vengono estratti e memorizzati fino a quando una delle seguenti situazioni:
- n caratteri vengono memorizzati;
§27.7.3.7 [ostream.unformatted]/5
caratteri vengono inseriti fino una delle seguenti situazioni
- n sono inseriti caratteri;
"zero caratteri sono memorizzati/inseriti" è vero prima che qualcosa venga memorizzato o estratto.
Guardando implementazioni attuali, vedo for (; gcount < n; ++gcount)
in libc++ o sgetn(buffer, n);
in stdlibc++ che ha il equivalent loop
hai fatto un caso speciale di rendere la dimensione 0..nessun altro – Anirudha
Sono abbastanza sicuro che non accadrà nulla di brutto. – Archimaredes
@Archimaredes, sono incerto. Ricordo vagamente che MSVC ha lanciato un'affermazione quando ho provato questo. Sei sicuro? –