boot.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "crucible/core/boot.hpp" #include "crucible/core/handlers.hpp" #include "crucible/core/iterators.hpp" #include <exception> #include <type_traits> #include <utility> namespace crucible::core { auto boot_from_main(int argc, char **argv, Boot_Function const boot_function) -> int { std::set_terminate(handle_terminate); auto const arguments { iterate(argv, argc) .map([](char const *argument) { return String_View { argument, std::strlen(argument) }; }) .materialize<Heap_Buffer<String_View>>() }; Exit_Status const status { boot_function(arguments.view()) }; static_assert(std::is_same_v<std::underlying_type_t<Exit_Status>, int>); return static_cast<int>(status); } }