From 5ddd0cad15999439bbf96aa2e5241e9dced848ed Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Sat, 30 Dec 2023 07:43:21 -0800 Subject: [PATCH] Add a visitor for scan arguments --- test/scan.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/scan.h b/test/scan.h index e368f37b4603..6217f2235fac 100644 --- a/test/scan.h +++ b/test/scan.h @@ -363,6 +363,30 @@ class scan_arg { custom.scan = scan_custom_arg; } + template + auto visit(Visitor&& vis) -> decltype(vis(std::declval())) { + switch (type) { + case scan_type::none_type: + break; + case scan_type::int_type: + return vis(int_value); + case scan_type::uint_type: + return vis(uint_value); + case scan_type::long_long_type: + return vis(long_long_value); + case scan_type::ulong_long_type: + return vis(ulong_long_value); + case scan_type::string_type: + return vis(string); + case scan_type::string_view_type: + return vis(string_view); + case scan_type::custom_type: + // TODO: implement + break; + } + return vis(monostate()); + } + private: template static void scan_custom_arg(void* arg, scan_parse_context& parse_ctx,