std::is_same 编译器之间的结果不同

问题描述 投票:0回答:1
#include <iostream>

int main() {
    bool b = true;
    std::cout << std::is_same<decltype(!(!b)), bool>::value << "\n";

    auto bb = (!(!b));
    std::cout << std::is_same<decltype(bb), bool>::value << "\n";
}

上面的代码使用不同的编译器会有不同的结果。 这是编译器错误还是我遗漏了什么?

并排 gcc 与 clang 演示

c++ boolean rvalue lvalue value-categories
1个回答
50
投票

这是一个 gcc bug。问题是 gcc 错误地将表达式

!(!b)
视为左值而不是右值。您可以在此处确认这一点。正如您将在上面链接的演示中看到的,gcc 给出的输出是
lvalue
而不是
prvalue

该错误已报告为:

GCC 将右值视为左值

© www.soinside.com 2019 - 2024. All rights reserved.