Требуется выражение дает ошибку компиляции вместо false для std :: inistine_ptr в C ++ 20C++

Программы на C++. Форум разработчиков
Anonymous
Требуется выражение дает ошибку компиляции вместо false для std :: inistine_ptr в C ++ 20

Сообщение Anonymous »

Я экспериментирую с концепциями C ++ 20 и требует выражения. Согласно стандарту, требуется выражение, должно проверить хорошо сформированность выражения и вернуть false , если выражение не является действительным, не вызывая ошибку компиляции.

Однако я столкнулся с следующим поведением с помощью std :: ulious_ptr на gcc и clang:

Код: Выделить всё

#include 

template 
inline constexpr bool is_dereferenceable_v = requires(T t) { *t; };

static_assert(!is_dereferenceable_v); // Should be fine
static_assert(is_dereferenceable_v);  // Also fails
demo
Ожидаемое поведение:

[*] Выражение *t не очень сформировано для std :: ulious_ptr (потому что dereferencing void * является инвазии). Требуется выражение должно вернуть false .
[*]

Код: Выделить всё

static_assert(!is_dereferenceable_v)
должен пройти. noexcept (*pointer) specifier.
* оба варианта static_assert , независимо от того, если бы он, по -видимому, проверяет это или false . /> Вопрос: < /strong>

это поведение является ошибкой в ​​GCC /Clang? Согласно стандарту, требуется { *t; } должен вернуть false для неверных выражений, а не вызывает ошибку компиляции.

Подробнее здесь: https://stackoverflow.com/questions/797 ... unique-ptr

Вернуться в «C++»