Правильно ли сформирован std:: declval<bool &>() = std:: declval <std:: nullptr_t> ()?
вот libstdcxx static_assert:
static_assert(!std::is_assignable<bool&, std::nullptr_t>::value, "Error");
Из https://en.cppreference.com/w/cpp/types/is_assignable:
Если выражение
std::declval<T>() = std::declval<U>()
правильно сформирован в недооцененном контексте, обеспечивает постоянное значение члена, равное true. В противном случае значение ложно. Проверки доступа выполняются как будто из контекста, не связанного ни с одним из типов.
Итак, libstdcxx думаю, что это не присваивается, конечно, gcc не может пройти этот случай
Напротив, Clang может пройти этот случай
является std::declval<bool&>() = std::declval<std::nullptr_t>()
хорошо, да, лязг или gcc, кто возражает против стандарта здесь?