From 4dd2f3d03dcad28c267ecee85560a9ff151bcb66 Mon Sep 17 00:00:00 2001 From: Congcong Cai Date: Thu, 7 Mar 2024 19:07:39 +0800 Subject: [PATCH 1/2] fix ambiguous for HandlerWithResponse and Handler in set_error_handler using lambda expression as Handler in set_error_handler will cause ambiguous. Template forwarding can forward HandlerWithResponse to the correct overloading function --- httplib.h | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/httplib.h b/httplib.h index cabdb48..74c034e 100644 --- a/httplib.h +++ b/httplib.h @@ -231,6 +231,7 @@ using socket_t = int; #include #include #include +#include #include #include #include @@ -871,8 +872,13 @@ public: Server &set_default_file_mimetype(const std::string &mime); Server &set_file_request_handler(Handler handler); - Server &set_error_handler(HandlerWithResponse handler); - Server &set_error_handler(Handler handler); + template + Server &set_error_handler(ErrorHandlerFunc &&handler) { + return set_error_handler_impl( + std::forward(handler), + std::is_convertible{}); + } + Server &set_exception_handler(ExceptionHandler handler); Server &set_pre_routing_handler(HandlerWithResponse handler); Server &set_post_routing_handler(Handler handler); @@ -934,6 +940,9 @@ protected: size_t payload_max_length_ = CPPHTTPLIB_PAYLOAD_MAX_LENGTH; private: + Server &set_error_handler_impl(HandlerWithResponse handler, std::true_type); + Server &set_error_handler_impl(Handler handler, std::false_type); + using Handlers = std::vector, Handler>>; using HandlersForContentReader = @@ -5797,12 +5806,14 @@ inline Server &Server::set_file_request_handler(Handler handler) { return *this; } -inline Server &Server::set_error_handler(HandlerWithResponse handler) { +inline Server &Server::set_error_handler_impl(HandlerWithResponse handler, + std::true_type) { error_handler_ = std::move(handler); return *this; } -inline Server &Server::set_error_handler(Handler handler) { +inline Server &Server::set_error_handler_impl(Handler handler, + std::false_type) { error_handler_ = [handler](const Request &req, Response &res) { handler(req, res); return HandlerResponse::Handled; From 07288888ad39004ddcdfefadfdd666c3a8737a5c Mon Sep 17 00:00:00 2001 From: yhirose Date: Thu, 11 Apr 2024 22:26:30 -0400 Subject: [PATCH 2/2] Code cleanup --- httplib.h | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/httplib.h b/httplib.h index 698849c..4c446d9 100644 --- a/httplib.h +++ b/httplib.h @@ -231,7 +231,6 @@ using socket_t = int; #include #include #include -#include #include #include #include @@ -874,7 +873,7 @@ public: template Server &set_error_handler(ErrorHandlerFunc &&handler) { - return set_error_handler_impl( + return set_error_handler_core( std::forward(handler), std::is_convertible{}); } @@ -940,9 +939,6 @@ protected: size_t payload_max_length_ = CPPHTTPLIB_PAYLOAD_MAX_LENGTH; private: - Server &set_error_handler_impl(HandlerWithResponse handler, std::true_type); - Server &set_error_handler_impl(Handler handler, std::false_type); - using Handlers = std::vector, Handler>>; using HandlersForContentReader = @@ -952,6 +948,9 @@ private: static std::unique_ptr make_matcher(const std::string &pattern); + Server &set_error_handler_core(HandlerWithResponse handler, std::true_type); + Server &set_error_handler_core(Handler handler, std::false_type); + socket_t create_server_socket(const std::string &host, int port, int socket_flags, SocketOptions socket_options) const; @@ -5817,13 +5816,13 @@ inline Server &Server::set_file_request_handler(Handler handler) { return *this; } -inline Server &Server::set_error_handler_impl(HandlerWithResponse handler, +inline Server &Server::set_error_handler_core(HandlerWithResponse handler, std::true_type) { error_handler_ = std::move(handler); return *this; } -inline Server &Server::set_error_handler_impl(Handler handler, +inline Server &Server::set_error_handler_core(Handler handler, std::false_type) { error_handler_ = [handler](const Request &req, Response &res) { handler(req, res);