bool enabled;
};
+
+//for gcc 4.6
+#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 6)
+template <typename X>
+struct RefChanger : unique_ptr<RevertibleRef<X>>
+{
+ RefChanger(unique_ptr<RevertibleRef<X>> p)
+ : unique_ptr<RevertibleRef<X>>(move(p))
+ {}
+};
+#else
template <typename X> using RefChanger = unique_ptr<RevertibleRef<X>>;
+#endif
/// Saves the value of \param ref in a movable object
return make_unique<RevertibleRef<X>>(ref);
}
-/// Temporarily assign value \param val to \param ref. If \param cond is false,
-/// then the assignation does not happen and the RefChanger starts disabled.
+/// Temporarily assign value val to reference ref.
+/// To apply the change conditionnally, one can write:
+/// Changer dummy = (cond) ? make_change(a, b) : Changer();
template <typename X>
-RefChanger<X> make_change(X & ref, X const val, bool cond = true)
+RefChanger<X> make_change(X & ref, X const val)
{
auto rc = make_save(ref);
- if (!cond)
- rc->keep();
- else
- ref = val;
+ ref = val;
return rc;
}