Figure 1: The SAFETYPE template class

template<class T>
class SAFETYPE
{
   public:
      SAFETYPE();
      SAFETYPE(const SAFETYPE<T>& SAFETYPEsrc);
      SAFETYPE(const T& t);  

      // member methods for atomic lock/unlock
      void SingleLock()const;
      void SingleUnlock()const;

      // operators
      operator T() const; 
      const SAFETYPE<T>& 
      operator=(const SAFETYPE<T>& SAFETYPEsrc);
      const SAFETYPE<T>& 
      operator+=(const SAFETYPE<T>& SAFETYPEsrc);
      const SAFETYPE<T>& 
      operator-=(const SAFETYPE<T>& SAFETYPEsrc);

      /* the rest of the C operators ... */
      
   protected:
      HANDLE m_hMutex; // access protection
      T m_t;           // The data 
};