template <typename T, CheckType = CheckType::Default, Destructor = Destructor::Default>
class LazyInit
Wrapper type for global variables that removes automatic constructor and
destructor generation and provides explicit control over initialization.
This avoids initialization order hazards between globals, as well as code
that runs before and after global constructors are invoked.
This is the base type that specifies the default parameters that control
consistency checks and global destructor generation options.
See lib/lazy_init/options.h for a description of CheckType and Destructor
option values.
Note, T must be construtible by LazyInit, however, its constructor need not
be public if Access is declared as a friend. For example:
class Foo {
friend lazy_init::Access;
Foo(int arg);
};