Por que essa variável não utilizada não é otimizada?

Eu brinquei com o CompilerExplorer de Godbolt. Eu queria ver como são boas certas otimizações. Meu exemplo de trabalho mínimo é:

#include <vector>

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

O assembler gerado (pelo 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 pode ver, clang sabe a resposta, mas faz muitas coisas antes de retornar. Parece-me que até o vetor é criado, devido ao "operador new / delete".

Alguém pode me explicar o que acontece aqui e por que não volta apenas?

O código gerado pelo GCC (não copiado aqui) parece construir explicitamente o vetor. Alguém sabe que o GCC não é capaz de deduzir o resultado?

questionAnswers(3)

yourAnswerToTheQuestion