13#ifndef dealii_sundials_sundials_handle_h
14#define dealii_sundials_sundials_handle_h
18#ifdef DEAL_II_WITH_SUNDIALS
22# ifdef DEAL_II_HAVE_CXX20
31#ifdef DEAL_II_WITH_SUNDIALS
36# if defined(DEAL_II_HAVE_CXX20)
46 concept SundialsTraits =
requires(
typename T::Handle h) {
49 } -> std::same_as<void>;
71 template <
typename Traits>
76 using Handle =
typename Traits::Handle;
86 ExcMessage(
"SUNDIALS failed to create an object."));
99 : handle(std::exchange(other.handle,
nullptr))
108 handle = std::exchange(other.handle,
nullptr);
126 if (handle !=
nullptr)
128 Traits::free(handle);
SundialsHandle(Handle handle)
typename Traits::Handle Handle
SundialsHandle(const SundialsHandle &)=delete
SundialsHandle(SundialsHandle &&other) noexcept
SundialsHandle & operator=(SundialsHandle &&other) noexcept
SundialsHandle & operator=(const SundialsHandle &)=delete
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_CXX20_REQUIRES(condition)
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)