O
std::void_t<decltype(std::declval<Type>().update())
Знаю, что можно передать просто 0, но есть ли универсальный способ или может можно как то сделать саму проверку универсальной?
std::declval<int>()
Size: a a a
O
std::void_t<decltype(std::declval<Type>().update())
std::declval<int>()
RM
std::declval<int>()
has_function_v
RM
O
std::void_t<decltype(std::declval<Type>().update())
0
как константу (хотя 42 вполне вариант) для этого. 0 — не int слишком перегружен в языке. Может найти update
, принимающий указатель или провалить проверку из-за наличия двух перегрузокO
has_function_v
experimental
), вариант №2 — hana::is_valid (пример прямо в readme)RM
RM
O
RM
using update_args_t = std::declval<void>();
RM
O
using update_args_t = std::declval<void>();
void
, для которой отличается проверка. Вероятно, ты бы хотел P0146, но увыRM
void
, для которой отличается проверка. Вероятно, ты бы хотел P0146, но увыRM
std::void_t
и в struct has_type_fn
убрать std::void_t
то все работаетO
std::void_t
и в struct has_type_fn
убрать std::void_t
то все работаетstruct has_type_fn<Type,
Func, std::void_t<Func>>
?RM
struct has_type_fn<Type,
Func, std::void_t<Func>>
?RM
O
if constexpr (has_update_v<my_struct>) { }
Лучше возьми готовую реализацию is_detected
, иначе отлаживать неожиданные вещи будешь неожиданно и в неожиданных местах (с неожиданным результатом)RM
if constexpr (has_update_v<my_struct>) { }
Лучше возьми готовую реализацию is_detected
, иначе отлаживать неожиданные вещи будешь неожиданно и в неожиданных местах (с неожиданным результатом)O
false
, если нет метода update
RM