This helps force a conversion from the second argument into whatever
type the variable truly is.

This change ended up being unnecessary, but it is probably useful for
others anyway.

gcc/cp/ChangeLog:

        * cp-tree.h (temp_override): In provided-value constructor,
        don't deduce based on provided value.
---
 gcc/cp/cp-tree.h | 38 +++++++++++++++++++-------------------
 1 file changed, 19 insertions(+), 19 deletions(-)

diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 5905236752bc..32865ba1ff3a 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -2256,25 +2256,6 @@ public:
   }
 };
 
-/* RAII sentinel that saves the value of a variable, optionally
-   overrides it right away, and restores its value when the sentinel
-   id destructed.  */
-
-template <typename T>
-class temp_override
-{
-  T& overridden_variable;
-  T saved_value;
-public:
-  temp_override(T& var) : overridden_variable (var), saved_value (var) {}
-  temp_override(T& var, T overrider)
-    : overridden_variable (var), saved_value (var)
-  {
-    overridden_variable = overrider;
-  }
-  ~temp_override() { overridden_variable = saved_value; }
-};
-
 /* Wrapping a template parameter in type_identity_t hides it from template
    argument deduction.  */
 #if __cpp_lib_type_identity
@@ -2286,6 +2267,25 @@ template <typename T>
 using type_identity_t = typename type_identity<T>::type;
 #endif
 
+/* RAII sentinel that saves the value of a variable, optionally
+   overrides it right away, and restores its value when the sentinel
+   id destructed.  */
+
+template <typename T>
+class temp_override
+{
+  T& overridden_variable;
+  T saved_value;
+public:
+  temp_override (T& var) : overridden_variable (var), saved_value (var) {}
+  temp_override (T& var, type_identity_t<T> overrider)
+    : overridden_variable (var), saved_value (var)
+  {
+    overridden_variable = overrider;
+  }
+  ~temp_override() { overridden_variable = saved_value; }
+};
+
 /* Object generator function for temp_override, so you don't need to write the
    type of the object as a template argument.
 
-- 
2.55.0

Reply via email to