Код: Выделить всё
#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 варианты не выполняют , независимо от того, проверка ли это и true или false .
MSVC, по -видимому, принимает это (вероятно, игнорирует noExcte в этом контексте). /> Вопрос: < /strong>
это поведение является ошибкой в GCC /Clang? Согласно стандарту, требуется { *t; } должен вернуть false для недопустимых выражений, а не вызывает ошибку компиляции.
Подробнее здесь: https://stackoverflow.com/questions/797 ... unique-ptr
Мобильная версия