#ifndef LIBADWAITAMM_HELPERS_GOBJ_MIXIN_HPP #define LIBADWAITAMM_HELPERS_GOBJ_MIXIN_HPP #include #include namespace Adwaita::helpers { template struct gobj_mixin { template auto gobj(this Self && self) noexcept { using clean_type = std::remove_reference_t; using gobj_type = std::conditional_t, std::add_const_t, Glib::Object>; using cast_type = std::conditional_t, std::add_const_t, AdwType>; return reinterpret_cast(static_cast(self).gobj()); } template auto gobj_copy(this Self && self) noexcept -> AdwType * { using clean_type = std::remove_reference_t; using gobj_type = std::conditional_t, std::add_const_t, Glib::Object>; static_cast(self).reference(); return const_cast(self.gobj()); } }; } // namespace Adwaita::helpers #endif