aboutsummaryrefslogtreecommitdiff
path: root/absl/cleanup/cleanup.h
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2021-01-30 06:20:07 -0800
committerDerek Mauro <dmauro@google.com>2021-01-30 09:25:37 -0500
commit184d2f8364bcb05e413ec4c72cad0cf86e712d1c (patch)
treedb3f40595666712c8911161c3f34e0de439bc55f /absl/cleanup/cleanup.h
parenta9a49560208484f1f99efdde889da6147e8722fe (diff)
downloadabseil-184d2f8364bcb05e413ec4c72cad0cf86e712d1c.tar.gz
abseil-184d2f8364bcb05e413ec4c72cad0cf86e712d1c.tar.bz2
abseil-184d2f8364bcb05e413ec4c72cad0cf86e712d1c.zip
Export of internal Abseil changes
-- 8c77b14bdee3f4cafb8ba520d4d050b15a949fd4 by Derek Mauro <dmauro@google.com>: Fix absl::Cleanup usage example PiperOrigin-RevId: 354702001 -- 10365da7a0aacaa0c4774a4b618a76dff328611b by CJ Johnson <johnsoncj@google.com>: Swap the order of the C++11 and C++17 interfaces for absl::Cleanup to mirror the order used in the comment example PiperOrigin-RevId: 354675180 GitOrigin-RevId: 8c77b14bdee3f4cafb8ba520d4d050b15a949fd4 Change-Id: Ia2054b725ed737ff9e557cb3d973de7c34bc51b0
Diffstat (limited to 'absl/cleanup/cleanup.h')
-rw-r--r--absl/cleanup/cleanup.h42
1 files changed, 21 insertions, 21 deletions
diff --git a/absl/cleanup/cleanup.h b/absl/cleanup/cleanup.h
index eba04b33..f606b3f4 100644
--- a/absl/cleanup/cleanup.h
+++ b/absl/cleanup/cleanup.h
@@ -24,36 +24,36 @@
// ```
// void CopyGoodData(const char* input_path, const char* output_path) {
// FILE* in_file = fopen(input_path, "r");
-// FILE* out_file = fopen(output_path, "w");
-// if (in_file == nullptr || out_file == nullptr) return;
+// if (in_file == nullptr) return;
//
// // C++17 style using class template argument deduction
-// absl::Cleanup in_closer = [&in_file] { fclose(in_file); };
+// absl::Cleanup in_closer = [in_file] { fclose(in_file); };
//
-// // C++11 style using the factory function
-// auto out_closer = absl::MakeCleanup([&out_file] { fclose(out_file); });
+// FILE* out_file = fopen(output_path, "w");
+// if (out_file == nullptr) return; // `in_closer` will run
//
-// // `fclose` will be called on all exit paths by the cleanup instances
+// // C++11 style using the factory function
+// auto out_closer = absl::MakeCleanup([out_file] { fclose(out_file); });
//
// Data data;
// while (ReadData(in_file, &data)) {
// if (data.IsBad()) {
// LOG(ERROR) << "Found bad data.";
-// return; // `in_closer` and `out_closer` will call their callbacks
+// return; // `in_closer` and `out_closer` will run
// }
// SaveData(out_file, &data);
// }
-// return; // `in_closer` and `out_closer` will call their callbacks
+//
+// // `in_closer` and `out_closer` will run
// }
// ```
//
-// `std::move(cleanup).Invoke()` will execute the callback early, before
-// destruction, and prevent the callback from executing in the destructor.
+// Methods:
//
-// Alternatively, `std::move(cleanup).Cancel()` will prevent the callback from
-// ever executing at all.
+// `std::move(cleanup).Cancel()` will prevent the callback from executing.
//
-// Once a cleanup object has been `std::move(...)`-ed, it may not be used again.
+// `std::move(cleanup).Invoke()` will execute the callback early, before
+// destruction, and prevent the callback from executing in the destructor.
#ifndef ABSL_CLEANUP_CLEANUP_H_
#define ABSL_CLEANUP_CLEANUP_H_
@@ -101,6 +101,14 @@ class ABSL_MUST_USE_RESULT Cleanup {
cleanup_internal::Storage<Callback> storage_;
};
+// `absl::Cleanup c = /* callback */;`
+//
+// C++17 type deduction API for creating an instance of `absl::Cleanup`.
+#if defined(ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION)
+template <typename Callback>
+Cleanup(Callback callback) -> Cleanup<cleanup_internal::Tag, Callback>;
+#endif // defined(ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION)
+
// `auto c = absl::MakeCleanup(/* callback */);`
//
// C++11 type deduction API for creating an instance of `absl::Cleanup`.
@@ -115,14 +123,6 @@ absl::Cleanup<cleanup_internal::Tag, Callback> MakeCleanup(Callback callback) {
return {std::move(callback)};
}
-// `absl::Cleanup c = /* callback */;`
-//
-// C++17 type deduction API for creating an instance of `absl::Cleanup`.
-#if defined(ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION)
-template <typename Callback>
-Cleanup(Callback callback) -> Cleanup<cleanup_internal::Tag, Callback>;
-#endif // defined(ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION)
-
ABSL_NAMESPACE_END
} // namespace absl