19#ifndef FORTRAN_COMMON_RESTORER_H_
20#define FORTRAN_COMMON_RESTORER_H_
24template <
typename A>
class Restorer {
26 explicit RT_API_ATTRS Restorer(A &p, A original)
27 : p_{p}, original_{std::move(original)} {}
28 RT_API_ATTRS ~Restorer() { p_ = std::move(original_); }
32 Restorer(
const Restorer &) =
delete;
33 Restorer(Restorer &&that) =
delete;
34 const Restorer &operator=(
const Restorer &) =
delete;
35 const Restorer &operator=(Restorer &&that) =
delete;
42template <
typename A,
typename B>
43RT_API_ATTRS common::IfNoLvalue<Restorer<A>, B> ScopedSet(A &to, B &&from) {
44 A original{std::move(to)};
46 return Restorer<A>{to, std::move(original)};
48template <
typename A,
typename B>
49RT_API_ATTRS common::IfNoLvalue<Restorer<A>, B> ScopedSet(
50 A &to,
const B &from) {
51 A original{std::move(to)};
Definition bit-population-count.h:20