Code: Select all
#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
Erwartete Verhalten:
[*] Der Ausdruck *t ist nicht gut geformt für std :::Riadium_ptr (weil derferencing void * is usw. ist. Expression sollte falsch .
zurückgeben
Code: Select all
static_assert(!is_dereferenceable_v)
Ist dieses Verhalten ein Fehler in GCC /Clang? Nach dem Standard benötigt { *t; } sollte false für ungültige Ausdrücke zurückgeben, anstatt einen Kompilierungsfehler zu verursachen.