¿Por qué esta variable no utilizada no está optimizada?

Jugué con el compilador Explorador de Godbolt. Quería ver qué tan buenas son ciertas optimizaciones. Mi ejemplo mínimo de trabajo es:

#include <vector>

int foo() {
    std::vector<int> v {1, 2, 3, 4, 5};
    return v[4];
}

El ensamblador generado (por clang 5.0.0, -O2 -std = c ++ 14):

foo(): # @foo()
  push rax
  mov edi, 20
  call operator new(unsigned long)
  mov rdi, rax
  call operator delete(void*)
  mov eax, 5
  pop rcx
  ret

Como se puede ver, el sonido metálico sabe la respuesta, pero hace muchas cosas antes de regresar. Me parece que incluso el vector se crea, debido a "operador nuevo / eliminar".

¿Alguien puede explicarme qué sucede aquí y por qué no solo regresa?

El código generado por GCC (no copiado aquí) parece construir el vector explícitamente. ¿Alguien sabe que GCC no es capaz de deducir el resultado?

Respuestas a la pregunta(3)

Su respuesta a la pregunta