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,