protected:
// This should only be used as a static variable, which guarantees that this
// will be zero initialized.
- mutable std::atomic<void *> Ptr;
- mutable void (*DeleterFn)(void*);
- mutable const ManagedStaticBase *Next;
+ mutable std::atomic<void *> Ptr{nullptr};
+ mutable void (*DeleterFn)(void *) = nullptr;
+ mutable const ManagedStaticBase *Next = nullptr;
void RegisterManagedStatic(void *(*creator)(), void (*deleter)(void*)) const;
public:
+ /// ManagedStaticBase must be constexpr constructed so that they can be
+ /// accessed and constructed lazily during dynamic initilization of other
+ /// global variables, such as cl::opt command line flags.
+ constexpr ManagedStaticBase() = default;
+
/// isConstructed - Return true if this object has not been created yet.
bool isConstructed() const { return Ptr != nullptr; }