]> git.lyx.org Git - lyx.git/blobdiff - src/support/RefChanger.h
Added distribution of a missing file used by tests.
[lyx.git] / src / support / RefChanger.h
index 9b9d020a4119d063e3a7506265581de3926d8e96..a61abbd72befd7aa4d0561af8147279152b7b040 100644 (file)
@@ -45,7 +45,19 @@ private:
        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
@@ -54,16 +66,14 @@ template <typename X> RefChanger<X> make_save(X & ref)
        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;
 }