Listing 2: The true_typedef class implementation

/* /////////////////////////////////////////////////////////////
 *
 * ...
 *
 * Extract from stlsoft_true_typedef.h
 *
 * www:        http://www.synesis.com.au/stlsoft
 *             http://www.stlsoft.org/
 *
 * Copyright (C) 2002, Synesis Software Pty Ltd.
 * (Licensed under the Synesis Software Standard Source License:
 *  http://www.synesis.com.au/licenses/ssssl.html)
 *
 * ...
 *
 * ////////////////////////////////////////////////////////// */

...


template <ss_typename_param_k T, ss_typename_param_k U>
class true_typedef
{
public:
    typedef T                   value_type;
    typedef U                   unique_type;
    typedef true_typedef<T, U>  class_type;

// Construction
public:
    true_typedef()
        : m_value(value_type())
    {
    }
    ss_explicit_k true_typedef(const T &value)
        : m_value(value)
    {
    }
    true_typedef(const class_type &rhs)
        : m_value(rhs.m_value)
    {
    }

    const class_type &operator =(const class_type &rhs)
    {
        m_value = rhs.m_value;

        return *this;
    }

// Accessors
public:
    const value_type &base_type_value() const
    {
        return m_value;
    }
    value_type &base_type_value()
    {
        return m_value;
    }

// Members
protected:
    value_type  m_value;

// Implementation
private:
    // Not provided, as the syntax is less ambiguous when
    // assignment from an explicit temporary is required
    const class_type &operator =(const T &value);
};