@@ -871,8 +871,13 @@ class Server {
871
871
Server &set_default_file_mimetype (const std::string &mime);
872
872
Server &set_file_request_handler (Handler handler);
873
873
874
- Server &set_error_handler (HandlerWithResponse handler);
875
- Server &set_error_handler (Handler handler);
874
+ template <class ErrorHandlerFunc >
875
+ Server &set_error_handler (ErrorHandlerFunc &&handler) {
876
+ return set_error_handler_core (
877
+ std::forward<ErrorHandlerFunc>(handler),
878
+ std::is_convertible<ErrorHandlerFunc, HandlerWithResponse>{});
879
+ }
880
+
876
881
Server &set_exception_handler (ExceptionHandler handler);
877
882
Server &set_pre_routing_handler (HandlerWithResponse handler);
878
883
Server &set_post_routing_handler (Handler handler);
@@ -943,6 +948,9 @@ class Server {
943
948
static std::unique_ptr<detail::MatcherBase>
944
949
make_matcher (const std::string &pattern);
945
950
951
+ Server &set_error_handler_core (HandlerWithResponse handler, std::true_type);
952
+ Server &set_error_handler_core (Handler handler, std::false_type);
953
+
946
954
socket_t create_server_socket (const std::string &host, int port,
947
955
int socket_flags,
948
956
SocketOptions socket_options) const ;
@@ -5808,12 +5816,14 @@ inline Server &Server::set_file_request_handler(Handler handler) {
5808
5816
return *this ;
5809
5817
}
5810
5818
5811
- inline Server &Server::set_error_handler (HandlerWithResponse handler) {
5819
+ inline Server &Server::set_error_handler_core (HandlerWithResponse handler,
5820
+ std::true_type) {
5812
5821
error_handler_ = std::move (handler);
5813
5822
return *this ;
5814
5823
}
5815
5824
5816
- inline Server &Server::set_error_handler (Handler handler) {
5825
+ inline Server &Server::set_error_handler_core (Handler handler,
5826
+ std::false_type) {
5817
5827
error_handler_ = [handler](const Request &req, Response &res) {
5818
5828
handler (req, res);
5819
5829
return HandlerResponse::Handled;
0 commit comments