В принципе, как проверить, что член является статическим?C++

Программы на C++. Форум разработчиков
Anonymous
В принципе, как проверить, что член является статическим?

Сообщение Anonymous »

Это похоже на раздел «Понимание концепций». Проверьте, является ли член статическим, но в разделе вопросов и ответов спрашивается только, почему он не работает, а здесь я спрашиваю, как это исправить.
Рассмотрим следующий код:

Код: Выделить всё

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
Этот код не компилируется, поскольку C == true, поскольку T::x разрешен даже для нестатических членов в неоцениваемом контексте.
Как мне скомпилировать этот код? Т.е. как создать концепцию, которая разрешает статические члены, но отклоняет нестатические?

Код: Выделить всё

&& !requires(T t) {t.x;}
не работает, поскольку он также отклоняет статические элементы, поскольку для них разрешен t.x.

Код: Выделить всё

&& !requires(T t) {&T::x;}
также не работает, поскольку для статических членов он образует обычный указатель, не являющийся членом.

Подробнее здесь: https://stackoverflow.com/questions/797 ... -is-static

Вернуться в «C++»