Erfordert Expression Angaben zum Kompilierungsfehler anstelle von Falsch für std :: einzietrat_ptr in C ++ 20

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Erfordert Expression Angaben zum Kompilierungsfehler anstelle von Falsch für std :: einzietrat_ptr in C ++ 20

by Anonymous » 24 Aug 2025, 02:44

Ich experimentiere mit C ++ 20-Konzepten und erfordert Ausdrücke. STD :: Unique_ptr auf gcc und klang:

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
Demo
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)
sollte passieren. noexcept (*pointer) Spezifizierer. /> Frage: < /strong>

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.

Top