inline details::FormInteractiveDataInput<DATAT, ELEMENT> FNAME(const std::string & name, bool required, \
bool interactive = true) \
{ \
return {name, required, interactive}; \
} \
\
template<typename T = DATAT, typename = std::enable_if_t<!std::is_same_v<T, bool>>> \
inline auto FNAME(const std::string & name, bool required, T value, bool interactive = true) \
{ \
if constexpr(std::is_invocable_v<T>) \
{ \
return details::FormInteractiveDataInput<T, ELEMENT>{name, required, value, interactive}; \
} \
else \
{ \
if constexpr(std::is_same_v<std::decay_t<T>, DATAT>) \
{ \
return details::FormInteractiveDataInput<DATAT, ELEMENT>{name, required, value, interactive}; \
} \
else { return details::FormInteractiveDataInput<DATAT, ELEMENT>{name, required, DATAT{value}, interactive}; } \
} \
}