Wie kann in einem Konzept überprüft werden, ob ein Mitglied statisch ist?C++

Programme in C++. Entwicklerforum
Anonymous
 Wie kann in einem Konzept überprüft werden, ob ein Mitglied statisch ist?

Post by Anonymous »

Dies ähnelt dem Verständnis von Konzepten. Überprüfen Sie, ob ein Mitglied statisch ist, aber in dieser Frage-und-Antwort-Runde wird nur gefragt, warum es nicht funktioniert, und hier frage ich, wie man das Problem beheben kann.
Bedenken Sie den folgenden Code:

Code: Select all

struct A
{
static int x;
};

struct B
{
int x;
};

template 
concept C = requires
{
T::x;
};

static_assert(C); // ok, as expected
static_assert(!C); // error, `C == true` but I want it to be false
Dieser Code wird nicht kompiliert, weil C == true, weil T::x auch für nicht statische Mitglieder in nicht ausgewerteten Kontexten zulässig ist.
Wie mache ich diese Kompilierung? D.h. Wie erstelle ich ein Konzept, das statische-Mitglieder zulässt, aber nicht-statische Mitglieder ablehnt?

Code: Select all

&& !requires(T t) {t.x;}
funktioniert nicht, da es auch statische-Mitglieder ablehnt, da t.x für sie zulässig ist.

Code: Select all

&& !requires(T t) {&T::x;}
funktioniert auch nicht, da es für statische-Mitglieder einen regulären Nicht-Mitgliedszeiger bildet.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post