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);

};