#pragma once
#include <concepts>
template <class That, class Frame>
concept Frame_Lease = std::move_constructible<That> && !std::copy_constructible<That> && requires(That& lease, const That& const_lease) {
    { static_cast<bool>(const_lease) } -> std::same_as<bool>;
    { lease.get() } -> std::same_as<Frame*>;
    { const_lease.get() } -> std::same_as<const Frame*>;
    { lease.operator->() } -> std::same_as<Frame*>;
    { const_lease.operator->() } -> std::same_as<const Frame*>;
    { *lease } -> std::same_as<Frame&>;
    { *const_lease } -> std::same_as<const Frame&>;
};
template <class That, class Frame>
concept Painter_Frame_Lease = Frame_Lease<That, Frame>;
template <class That, class Frame>
concept Render_Frame_Lease = Frame_Lease<That, Frame>;
