Здравствуйте, 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. Я болен ПГМ.