On 7/9/26 12:36 PM, Arsen Arsenović wrote:
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.

OK.

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.

Reply via email to