Obtener un error de compilación en el código estándar o un error de compilación interno es más probable que los optimizadores estén equivocados. Pero he oído hablar de compiladores que optimizan los bucles incorrectamente olvidando algunos efectos secundarios que causa un método.
No tengo sugerencias sobre cómo saber si eres tú o el compilador. Puedes probar con otro compilador.
Un día me preguntaba si era mi código o no y alguien me sugirió valgrind. Pasé los 5 o 10 minutos para ejecutar mi programa con él (creovalgrind --leak-check=yes myprog arg1 arg2 que lo hice pero jugué con otras opciones) e inmediatamente me mostró UNA línea que se ejecuta en un caso específico, que era el problema. Luego, mi aplicación funcionó sin problemas desde entonces sin fallas, errores o comportamientos extraños. valgrind u otra herramienta como esta es una buena manera de saber si es su código.
Nota al margen: una vez me pregunté por qué el rendimiento de mi aplicación apestaba. Resultó que todos mis problemas de rendimiento también estaban en una línea. Yo escribi for(int i=0; i<strlen(sz); ++i) {. El sz fue unos pocos mb. Por alguna razón, el compilador se ejecutaba cada vez, incluso después de la optimización. Una línea puede ser un gran problema. De actuaciones a choques