Однако я столкнулся с следующим поведением с помощью 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
Ожидаемое поведение:
[*] Выражение *t не очень сформировано для std :: ulious_ptr (потому что dereferencing void * является инвазии). Требуется выражение должно вернуть false .
[*]
Код: Выделить всё
static_assert(!is_dereferenceable_v)* оба варианта static_assert , независимо от того, если бы он, по -видимому, проверяет это или false . /> Вопрос: < /strong>
это поведение является ошибкой в GCC /Clang? Согласно стандарту, требуется { *t; } должен вернуть false для неверных выражений, а не вызывает ошибку компиляции.
Подробнее здесь: https://stackoverflow.com/questions/797 ... unique-ptr
Мобильная версия