diff options
author | Abseil Team <absl-team@google.com> | 2021-01-30 06:20:07 -0800 |
---|---|---|
committer | Derek Mauro <dmauro@google.com> | 2021-01-30 09:25:37 -0500 |
commit | 184d2f8364bcb05e413ec4c72cad0cf86e712d1c (patch) | |
tree | db3f40595666712c8911161c3f34e0de439bc55f /absl/cleanup/cleanup.h | |
parent | a9a49560208484f1f99efdde889da6147e8722fe (diff) | |
download | abseil-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.h | 42 |
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 |