diff --git a/include/verilated_types.h b/include/verilated_types.h index 5d5c41db2..6a77768c3 100644 --- a/include/verilated_types.h +++ b/include/verilated_types.h @@ -1508,8 +1508,14 @@ public: // For 'if (ptr)...' operator bool() const { return m_objp; } // In SV A == B iff both are handles to the same object (IEEE 1800-2017 8.4) - bool operator==(const VlClassRef& rhs) const { return m_objp == rhs.m_objp; }; - bool operator!=(const VlClassRef& rhs) const { return m_objp != rhs.m_objp; }; + template + bool operator==(const VlClassRef& rhs) const { + return m_objp == rhs.m_objp; + }; + template + bool operator!=(const VlClassRef& rhs) const { + return m_objp != rhs.m_objp; + }; }; template diff --git a/test_regress/t/t_class_compare.v b/test_regress/t/t_class_compare.v index ee4826725..bcbb1842a 100644 --- a/test_regress/t/t_class_compare.v +++ b/test_regress/t/t_class_compare.v @@ -14,13 +14,22 @@ class Cls; int i; endclass +class ExtendCls extends Cls; +endclass + module t; initial begin Cls a = new; Cls b = new; + ExtendCls ext = new; `check_ne(a, b) + `check_ne(a, ext) + `check_ne(ext, a) a = b; `check_eq(a, b) + a = ext; + `check_eq(a, ext) + `check_eq(ext, a) $write("*-* All Finished *-*\n"); $finish; end