Re[11]: имя переменной в компайл-тайм
От: ollv СССР https://youtu.be/DQDoYs6wHoo
Дата: 18.03.18 12:18
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, ollv, Вы писали:


O>>__PRETTY_FUNCTION__ — не компайлтайм сущность, все. Инче всавьте это в компайлтайм параметром, в отличие от __FUNCSIG__ (в остальном они эквиваленты, дает сигнатуру фанкшина в момент инстанциации). Говорить тут больше не о чем.


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


R>https://ideone.com/axqWj0


R>
R>#include <iostream>

R>template <typename T>
R>constexpr size_t get_pretty_function_size()
R>{
R>  return sizeof(__PRETTY_FUNCTION__);
R>}

R>static_assert(87 == get_pretty_function_size<int>(), "invalid size");
R>static_assert(90 == get_pretty_function_size<double>(), "invalid size");
R>static_assert(116 == get_pretty_function_size<std::string>(), "invalid size");
R>

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

https://ideone.com/vspbCM
под эти требования попадет любой явно задаанный эррей, не преобразовавшийся в тривиальный поинтер.

template <int SS> struct sizeof_struct { char a__[SS]; };

template <typename T, int Size>
inline sizeof_struct<Size> count_of_array(T (&a)[Size]) {}

int main()
{
   static_assert(sizeof(count_of_array("")) == 1, "It is not a compiletime array");
}
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.