14#include "../Encoding.hpp"
25#if !(defined(_AMD64_) || defined(_X86_) || defined(_ARM_))
26#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || \
29#elif defined(i386) || defined(__i386) || defined(__i386__) || defined(__i386__) || defined(_M_IX86)
31#elif defined(__arm__) || defined(_M_ARM) || defined(_M_ARMT)
33#elif defined(__aarch64__) || defined(_M_ARM64)
35#elif defined(_M_ARM64EC)
53#include <processthreadsapi.h>
64CLI11_INLINE std::vector<std::string> compute_win32_argv() {
65 std::vector<std::string> result;
68 auto deleter = [](
wchar_t **ptr) { LocalFree(ptr); };
70 auto wargv = std::unique_ptr<wchar_t *[], decltype(deleter)>(CommandLineToArgvW(GetCommandLineW(), &argc), deleter);
73 if(wargv ==
nullptr) {
74 throw std::runtime_error(
"CommandLineToArgvW failed with code " + std::to_string(GetLastError()));
77 result.reserve(
static_cast<size_t>(argc));
78 for(
size_t i = 0; i < static_cast<size_t>(argc); ++i) {
79 result.push_back(narrow(wargv[i]));