#include #include #include extern "C" { using global_initializer = auto (*)() -> void; extern global_initializer __ctors_start; extern global_initializer __ctors_end; extern global_initializer __init_array_start; extern global_initializer __init_array_end; auto invoke_global_constructors() -> void { auto constructors = std::span{&__ctors_start, &__ctors_end}; auto initializers = std::span{&__init_array_start, &__init_array_end}; auto apply_invoke = [](auto invokable) -> void { std::invoke(invokable); }; std::ranges::for_each(constructors, apply_invoke); std::ranges::for_each(initializers, apply_invoke); } }