GCC 优化器从 5.1 开始就被破坏了吗?

Ser*_*nik 5 c++ gcc compiler-optimization

我正在观看一个旧视频Jason Turner:实用表演实践

一开始就有一个 GCC 5.1 中优化代码的示例:

#include <string>

int main() {
    return std::string("a").size();
}
Run Code Online (Sandbox Code Playgroud)

编译为“无”:

main:
        mov     eax, 1
        ret
Run Code Online (Sandbox Code Playgroud)

然而,我很惊讶地看到 GCC 13.2 的另一个输出:

main:
        sub     rsp, 40
        lea     rax, [rsp+16]
        mov     rdi, rsp
        mov     QWORD PTR [rsp+8], 1
        mov     QWORD PTR [rsp], rax
        mov     eax, 97
        mov     WORD PTR [rsp+16], ax
        call    std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_dispose()
        mov     eax, 1
        add     rsp, 40
        ret
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/45PWox4Gb

std::string.size()这是 GCC自 5.1(根据评论是 12.3)以来一直无法持续传播的错误吗?-std=它过去常常在没有参数的情况下做到这一点-O3。新版本需要-std=c++20提供相同的输出。