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.