struct Array(T)
{
    private struct Payload
    {
        size_t _capacity;
        T[] _payload;
        ~this()
        {
        }
        this(this)
        {
        }
    }
    private alias RefCounted!(Payload) Data;
    private Data _data;
    bool opEquals(ref const Array rhs) const
    {
        return true;
    }
}
struct BinaryHeap(Store)
{
    private static struct Data
    {
        Store _store;
        size_t _length;
    }
    private RefCounted!(Data) _payload;
}
struct RefCounted(T)
{
    struct RefCountedStore
    {
        private struct Impl
        {
            T _payload;
            size_t _count;
        }
        private Impl* _store;
    }
    RefCountedStore _refCounted;
    this(this)
    {
    }
    ~this()
    {
        .destroy(_refCounted._store._payload);
    }
    void opAssign(typeof(this) rhs)
    {
    }
    void opAssign(T rhs)
    {
        typeid(T).destroy(&rhs);
    }
}