Как стать автором
Обновить

Комментарии 5

С одной стороны, С++ — замечательный язык, но с другой стороны… Ну ввели бы нормальные синтаксические макросы, не нужно было бы так извращаться.
С другой стороны, нельзя объять необъятное и засунуть все в один язык. Больше языков, хороших и разных!
а рекурсивный вызов constexpr функий тут не поможет?
Мне не довелось еще пользоваться constexpr функциями, но насколько я понимаю, побочные эфекты не допускаются. А нам здесь нужно изменяемое глобальное состояние — текущее значение счетчика.
еще можно делать так:
#include <iostream>

#define DEFINE_COUNTER(NAME) namespace{ enum{ NAME = __COUNTER__ }; }
#define AUTOINCREMENTED_VALUE_OF(NAME) (__COUNTER__ - NAME)

DEFINE_COUNTER(MyCounter);

int main()
{
auto x = AUTOINCREMENTED_VALUE_OF(MyCounter); // x is 1
auto y = AUTOINCREMENTED_VALUE_OF(MyCounter); // y is 2

std::cout << "x = " << x << ", y = " << y << std::endl;
}

Если хочется счетчик с возможностью использования значения без приращения, можно использовать BOOST_PP_COUNTER вместо __COUNTER__
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.