summaryrefslogtreecommitdiff
path: root/absl/flags/internal/registry.h
diff options
context:
space:
mode:
Diffstat (limited to 'absl/flags/internal/registry.h')
-rw-r--r--absl/flags/internal/registry.h17
1 files changed, 13 insertions, 4 deletions
diff --git a/absl/flags/internal/registry.h b/absl/flags/internal/registry.h
index 6f5006a0..5f85ded5 100644
--- a/absl/flags/internal/registry.h
+++ b/absl/flags/internal/registry.h
@@ -74,13 +74,22 @@ bool RegisterCommandLineFlag(CommandLineFlag&);
//
// Retire flag with name "name" and type indicated by ops.
-bool Retire(const char* name, FlagFastTypeId type_id);
+void Retire(const char* name, FlagFastTypeId type_id, char* buf);
+
+constexpr size_t kRetiredFlagObjSize = 3 * sizeof(void*);
+constexpr size_t kRetiredFlagObjAlignment = alignof(void*);
// Registered a retired flag with name 'flag_name' and type 'T'.
template <typename T>
-inline bool RetiredFlag(const char* flag_name) {
- return flags_internal::Retire(flag_name, base_internal::FastTypeId<T>());
-}
+class RetiredFlag {
+ public:
+ explicit RetiredFlag(const char* flag_name) {
+ flags_internal::Retire(flag_name, base_internal::FastTypeId<T>(), buf_);
+ }
+
+ private:
+ alignas(kRetiredFlagObjAlignment) char buf_[kRetiredFlagObjSize];
+};
} // namespace flags_internal
ABSL_NAMESPACE_END