ti dico solo una cosa:
-O1 = boundary check sugli array e type check sugli oggetti (lancia eccezioni, gestibili a Runtime. semantica C++)
-Ofast = array senza boundary check e nessun type check sugli oggetti (crasha, non gestibile a Runtime, semantica C)
Ora ditemi se è normale che un linguaggio debba modificare la propria semantica in base ad uno switch del compilatore (cosa che fa già GCC ma in altri modi) e, peggio ancora, in base ad uno switch che dovrebbe influenzare solo le performance del codice!
Per me è cacca.