CLI11
2.7.1
C++11 Command Line Interface Parser
Toggle main menu visibility
Loading...
Searching...
No Matches
Argv_inl.hpp
1
// Copyright (c) 2017-2026, University of Cincinnati, developed by Henry Schreiner
2
// under NSF AWARD 1414736 and by the respective contributors.
3
// All rights reserved.
4
//
5
// SPDX-License-Identifier: BSD-3-Clause
6
7
#pragma once
8
9
// IWYU pragma: private, include "CLI/CLI.hpp"
10
11
// This include is only needed for IDEs to discover symbols
12
#include "../Argv.hpp"
13
14
#include "../Encoding.hpp"
15
16
// [CLI11:public_includes:set]
17
#include <memory>
18
#include <stdexcept>
19
#include <string>
20
#include <vector>
21
// [CLI11:public_includes:end]
22
23
// [CLI11:argv_inl_includes:verbatim]
24
#if defined(_WIN32)
25
#if !(defined(_AMD64_) || defined(_X86_) || defined(_ARM_))
26
#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || \
27
defined(_M_AMD64)
28
#define _AMD64_
29
#elif defined(i386) || defined(__i386) || defined(__i386__) || defined(__i386__) || defined(_M_IX86)
30
#define _X86_
31
#elif defined(__arm__) || defined(_M_ARM) || defined(_M_ARMT)
32
#define _ARM_
33
#elif defined(__aarch64__) || defined(_M_ARM64)
34
#define _ARM64_
35
#elif defined(_M_ARM64EC)
36
#define _ARM64EC_
37
#endif
38
#endif
39
40
// first
41
#ifndef NOMINMAX
42
// if NOMINMAX is already defined we don't want to mess with that either way
43
#define NOMINMAX
44
#include <windef.h>
45
#undef NOMINMAX
46
#else
47
#include <windef.h>
48
#endif
49
50
// second
51
#include <winbase.h>
52
// third
53
#include <processthreadsapi.h>
54
#include <shellapi.h>
55
#endif
56
// [CLI11:argv_inl_includes:end]
57
58
namespace
CLI {
59
// [CLI11:argv_inl_hpp:verbatim]
60
61
namespace
detail {
62
63
#ifdef _WIN32
64
CLI11_INLINE std::vector<std::string> compute_win32_argv() {
65
std::vector<std::string> result;
66
int
argc = 0;
67
68
auto
deleter = [](
wchar_t
**ptr) { LocalFree(ptr); };
69
// NOLINTBEGIN(*-avoid-c-arrays)
70
auto
wargv = std::unique_ptr<wchar_t *[], decltype(deleter)>(CommandLineToArgvW(GetCommandLineW(), &argc), deleter);
71
// NOLINTEND(*-avoid-c-arrays)
72
73
if
(wargv ==
nullptr
) {
74
throw
std::runtime_error(
"CommandLineToArgvW failed with code "
+ std::to_string(GetLastError()));
75
}
76
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]));
80
}
81
82
return
result;
83
}
84
#endif
85
86
}
// namespace detail
87
88
// [CLI11:argv_inl_hpp:end]
89
}
// namespace CLI
include
CLI
impl
Argv_inl.hpp
Generated by
1.17.0