不同编译器下的std::is_same结果不同

58

2
对我来说看起来像是gcc的一个bug,特别是因为它只出现在双重否定中......与此同时,您可以使用std::is_convertible。 - joergbrech
25
GCC认为!!b是一个左值,所以decltype报告bool &。它甚至允许!!b = false;。看起来像是一个明显的错误,请报告此问题。相同的情况也会发生在任何偶数个!之间。 - HolyBlackCat
1个回答

50
这是一个关于gcc bug的问题。问题在于gcc错误地将表达式!(!b)视为左值而不是右值。你可以在这里确认此问题。正如你在上面链接的演示中看到的那样,gcc的输出是lvalue而不是prvalue
该bug已被报告为: GCC treats rvalue as an lvalue

8
或许在早期的优化过程中,会将 !! 视为“冗余”而消除。 - Pablo H
10
value_category错误分类,!(!b)= false;实际上可以编译(在调试版本https://godbolt.org/z/Wxx3ds84f中编译为一个`mov`存储器,将`b = 0设置为0,否则被优化)。所以这很有趣。这不仅是分类输出中的错误。其他编译器当然会正确地拒绝它。@PabloH:任何偶数个!`都可以编译,任何奇数个都会被拒绝为不是左值,所以你对早期消除的猜测与该实验相一致。 - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接