Информация об изменениях

Сообщение Re[12]: имя переменной в компайл-тайм от 18.03.2018 12:26

Изменено 18.03.2018 12:30 rg45

Re[12]: имя переменной в компайл-тайм
Здравствуйте, ollv, Вы писали:


R>>__PRETTY_FUNCTION__ — компайлтайм сущность (не прероцессор, но компайл тайм):


Если пример с sizeof не достаточно убедителен, можно получить даже отдельные символы из __PRETTYY_FUNCTION__ в компайл тайм:

https://ideone.com/mPh41g

template <typename T, size_t I>
constexpr char get_pretty_function_at()
{
  return __PRETTY_FUNCTION__[I];
}

static_assert('i' == get_pretty_function_at<int, 42>(), "invalid symbol");
static_assert('e' == get_pretty_function_at<double, 55>(), "invalid symbol");
static_assert('b' == get_pretty_function_at<std::string, 64>(), "invalid symbol");
Re[12]: имя переменной в компайл-тайм
Здравствуйте, ollv, Вы писали:

O> Из данного примера выходит, что размер __PRETTY_FUNCTION__ компайл тайм сущность.


Если пример с sizeof не достаточно убедителен, можно получить даже отдельные символы из __PRETTYY_FUNCTION__ в компайл тайм:

https://ideone.com/mPh41g

template <typename T, size_t I>
constexpr char get_pretty_function_at()
{
  return __PRETTY_FUNCTION__[I];
}

static_assert('i' == get_pretty_function_at<int, 42>(), "invalid symbol");
static_assert('e' == get_pretty_function_at<double, 55>(), "invalid symbol");
static_assert('b' == get_pretty_function_at<std::string, 64>(), "invalid symbol");