Правильно ли сформирован 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, кто возражает против стандарта здесь?

0 ответов

Другие вопросы по тегам