27template <
typename T,
typename Enabled =
void>
34template <
typename T,
typename =
void>
38struct IsRegisteredType<T, std::void_t<decltype(TypeRegistry<T>{})>> : std::true_type {};
47 using ValueType =
typename std::remove_cv_t<T>;
50 "The provided template type is not registered. "
51 "Specify the data type manually or add a template specialization for TypeRegistry."
59#define UAPP_TYPEREGISTRY_NATIVE(NativeType, typeIndex) \
61 struct TypeRegistry<NativeType> { \
62 static const auto& getDataType() noexcept { \
63 return UA_TYPES[typeIndex]; \
97 static_assert(std::is_same_v<UA_String, UA_ByteString>);
98 static_assert(std::is_same_v<UA_String, UA_XmlElement>);
100 template <
typename... Ts>
103 detail::AlwaysFalse<Ts...>::value,
104 "Data type of UA_String is ambiguous (alias for UA_ByteString and UA_XmlElement). "
105 "Please specify data type manually."
static UA_LogCategory const char va_list args
constexpr bool isRegisteredType
const UA_DataType & getDataType() noexcept
#define UAPP_TYPEREGISTRY_NATIVE(NativeType, typeIndex)