27template <
typename T,
typename Enabled =
void>
34template <
typename T,
typename =
void>
35struct IsRegisteredType : std::false_type {};
38struct IsRegisteredType<T, std::void_t<decltype(TypeRegistry<T>{})>> : std::true_type {};
41constexpr bool isRegisteredType = IsRegisteredType<T>::value;
47 using ValueType =
typename std::remove_cv_t<T>;
49 detail::isRegisteredType<ValueType>,
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
const UA_DataType & getDataType() noexcept
#define UAPP_TYPEREGISTRY_NATIVE(NativeType, typeIndex)