On Wednesday, 30 January 2013 at 19:44:43 UTC, TommiT wrote:
[..]

More of fleshing out of namespace_thingy:

struct S
{
private:
    int m_startTime;
    int m_endTime;
    int m_duration;

public:
    namespace_thingy start
    {
        int opGet() const { return m_startTime; }

        start opAssign(int t)
        {
            m_startTime = t;
            m_duration = m_endTime - m_startTime;
            return start;
        }
    }

    namespace_thingy end
    {
        int opGet() const { return m_endTime; }

        end opAssign(int t)
        {
            m_endTime = t;
            m_duration = m_endTime - m_startTime;
            return end;
        }

        dur opAssign(string s : "+")(int t)
        {
            m_endTime += t;
            m_duration = m_endTime - m_startTime;
            return dur;
        }
    }

    namespace_thingy dur
    {
        dur opAssign(int t)
        {
            m_duration = t;
            m_endTime = m_startTime + m_duration;
            return dur;
        }

        bool opEquals(int t) const
        {
            return m_duration == t;
        }
    }

    this(int t)
    {
        start = 0;
        end = t;
        assert(dur == 100);
    }
}

...

S s;
s.start = 1;
s.end = 8;
assert(s.dur == 7);
s.end += 3;
assert(s.dur == 10);

int v = s.start;

s.start += 42; // error: no match for opAssign!"+"(S.start, int)
               //                 nor opAssign!"+"(int, int)
int d = s.dur; // error: no conversion from S.dur to int

Reply via email to