template void sc_signal { protected: T m_cur_val; T m_new_val; public: // read the current value virtual const T& read() const { return m_cur_val; } sc_signal& operator = ( const T& a ) { write( a ); return *this; } void write( const T& value_ ) { m_new_val = value_; if( !( m_new_val == m_cur_val ) ) { request_update(); } } ... }