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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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