Skip to content

Commit 1dee803

Browse files
committed
[SaveAndRestore] Upgrade this to support non-copyable types.
This adds a constructor and upgrades the dtor to work with move-only types. Differential Revision: https://reviews.llvm.org/D135940
1 parent 84a9ec2 commit 1dee803

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

llvm/include/llvm/Support/SaveAndRestore.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ namespace llvm {
2020
/// A utility class that uses RAII to save and restore the value of a variable.
2121
template <typename T> struct SaveAndRestore {
2222
SaveAndRestore(T &X) : X(X), OldValue(X) {}
23-
SaveAndRestore(T &X, const T &NewValue) : X(X), OldValue(X) {
24-
X = NewValue;
23+
SaveAndRestore(T &X, const T &NewValue) : X(X), OldValue(X) { X = NewValue; }
24+
SaveAndRestore(T &X, T &&NewValue) : X(X), OldValue(std::move(X)) {
25+
X = std::move(NewValue);
2526
}
26-
~SaveAndRestore() { X = OldValue; }
27-
T get() { return OldValue; }
27+
~SaveAndRestore() { X = std::move(OldValue); }
28+
const T &get() { return OldValue; }
2829

2930
private:
3031
T &X;

0 commit comments

Comments
 (0)