#pragma once

namespace Rumia
{
    template<typename Ty, typename ContainerTy>
    class Iterator
    {
    public:
        using DataType = Ty;
        using ContainerType = ContainerTy;

    public:
        Iterator( ContainerType& container ) : m_container( container )
        {
        }

        virtual ~Iterator( ) { }

        virtual Ty& operator*( ) = 0;
        virtual Ty& operator*( ) const = 0;

    protected:
        ContainerType& m_container;

    };
}
#pragma once

namespace Rumia
{
    template<typename Ty, typename ContainerTy>
    class Iterator
    {
    public:
        using DataType = Ty;
        using ContainerType = ContainerTy;

    public:
        Iterator( ContainerType& container ) : m_container( container )
        {
        }

        virtual ~Iterator( ) { }

        virtual Ty& operator*( ) const = 0;

    protected:
        ContainerType& m_container;

    };
}
Delete non-const reference operator pure virtual function
Delete non-const reference operator pure virtual function
