#include #include #include namespace PointerUtils { bool compareArrays(const std::unique_ptr& arr1, size_t size1, const std::unique_ptr& arr2, size_t size2); bool compareRawArrays(const std::uint8_t* arr1, size_t size1, const std::uint8_t* arr2, size_t size2); template struct is_smart_pointer : std::false_type {}; template struct is_smart_pointer> : std::true_type {}; template struct is_smart_pointer> : std::true_type {}; template struct is_smart_pointer> : std::true_type {}; template struct value_nonptr_type_impl { using type = Type; }; template struct value_nonptr_type_impl { using type = Type; }; template struct value_nonptr_type_impl> { using type = Type; }; template struct value_nonptr_type_impl> { using type = Type; }; template struct value_nonptr_type_impl> { using type = Type; }; template using value_nonptr_type = typename value_nonptr_type_impl::type; template struct to_raw_pointer { using type = Type; }; template struct to_raw_pointer> { using type = Type*; }; template struct to_raw_pointer> { using type = Type*; }; template struct to_raw_pointer> { using type = Type*; }; template using to_raw_pointer_t = typename to_raw_pointer::type; }