2

是一个 libstdcxx static_assert:

static_assert(!std::is_assignable<bool&, std::nullptr_t>::value, "Error");

cppreference: is_assignable :

如果表达式std::declval<T>() = std::declval<U>()在未计算的上下文中格式正确,则提供等于 true 的成员常量值否则,值为假。访问检查就像来自与任一类型无关的上下文一样执行。

所以,libstdcxx 认为它是不可赋值的,当然gcc 不能通过这种情况

相反,clang可以通过这种情况

std::declval<bool&>() = std::declval<std::nullptr_t>()格式良好的,iow,clang还是gcc,谁反对这里的标准?

4

0 回答 0