В принципе, как я могу проверить, что член является статическим?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++»