diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 327b327fdd..3e86d55066 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2017-01-31 Pedro Alves + + * common/scoped_restore.h + (scoped_restore_tmpl::scoped_restore_tmpl): Template on T2, and + change the value's parameter type to T2. + (make_scoped_restore): Likewise. + 2017-01-27 Walfred Tedeschi Richard Henderson diff --git a/gdb/common/scoped_restore.h b/gdb/common/scoped_restore.h index 0c8c30dcc8..ae7a49f00b 100644 --- a/gdb/common/scoped_restore.h +++ b/gdb/common/scoped_restore.h @@ -47,8 +47,11 @@ class scoped_restore_tmpl : public scoped_restore_base /* Create a new scoped_restore object that saves the current value of *VAR, and sets *VAR to VALUE. *VAR will be restored when this - scoped_restore object is destroyed. */ - scoped_restore_tmpl (T *var, T value) + scoped_restore object is destroyed. This is templated on T2 to + allow passing VALUEs of types convertible to T. + E.g.: T='base'; T2='derived'. */ + template + scoped_restore_tmpl (T *var, T2 value) : m_saved_var (var), m_saved_value (*var) { @@ -90,8 +93,8 @@ scoped_restore_tmpl make_scoped_restore (T *var) /* Make a scoped_restore. This is useful because it lets template argument deduction work. */ -template -scoped_restore_tmpl make_scoped_restore (T *var, T value) +template +scoped_restore_tmpl make_scoped_restore (T *var, T2 value) { return scoped_restore_tmpl (var, value); }