From 44c8c8d307faadb3f2572663ee743125e69f027c Mon Sep 17 00:00:00 2001 From: Philip Top Date: Fri, 4 Aug 2023 15:01:21 -0700 Subject: [PATCH] test an arm64 build on azure --- azure-pipelines.yml | 14 +++++++++++++ examples/testEXE.cpp | 49 +++++++++++++++++++++++++++++++++++++------- 2 files changed, 56 insertions(+), 7 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 1bb4d0771..7411a9871 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -28,6 +28,20 @@ jobs: - bash: cpplint --counting=detailed --recursive examples include/CLI tests displayName: Checking against google style guide + - job: msvc_arm64 + strategy: + matrix: + vs_arm64: + vmImage: "windows-2022" + cli11.std: 17 + cli11.build_type: Debug + cli11.options: -G "Visual Studio 17 2022" -A ARM64 + pool: + vmImage: $(vmImage) + + steps: + - template: .ci/azure-build.yml + - job: Native strategy: matrix: diff --git a/examples/testEXE.cpp b/examples/testEXE.cpp index b2cac7fba..3e9c2d681 100644 --- a/examples/testEXE.cpp +++ b/examples/testEXE.cpp @@ -10,17 +10,52 @@ #include #include +namespace key { + enum class my_enum { + val1, + val2 + }; + + std::optional deserialize(const std::string& value) { + if (value == "val1") { + return my_enum::val1; + } + else if (value == "val2") { + return my_enum::val2; + } + else { + return std::nullopt; + } + } + + // More deserialize overloads for a gazillion different types... + + template + concept Deserializable = requires (const std::string & value) { + { deserialize(value) } -> std::same_as; + }; + + template + bool lexical_cast(const std::string& src, T& dst) { + auto result = deserialize(src); + if (result) + dst = *result; + return !!result; + } + +} int main(int argc, const char *argv[]) { - int logLevel{0}; - CLI::App app{"Test App"}; - app.add_option("-v", logLevel, "level"); + CLI::App app; + + key::my_enum test{ key::my_enum::val2 }; - auto *subcom = app.add_subcommand("sub", "")->fallthrough(); - subcom->preparse_callback([&app](size_t) { app.get_subcommand("sub")->add_option_group("group"); }); + app.add_option("--test", test); - CLI11_PARSE(app, argc, argv); + // More code... + CLI11_PARSE(app,argc,argv); - std::cout << "level: " << logLevel << std::endl; + std::cout<(test)<<"=="<(key::my_enum::val2)<