@@ -90,70 +90,74 @@ enum class ErrorCode {
9090 UNKNOWN_ERROR = 1000 ,
9191};
9292
93- inline const std::unordered_map<ErrorCode, std::string> error_code_to_string_mapping = {{ErrorCode::OK, " OK" },
94- {ErrorCode::UNSUPPORTED_PROTOCOL, " UNSUPPORTED_PROTOCOL" },
95- {ErrorCode::FAILED_INIT, " FAILED_INIT" },
96- {ErrorCode::URL_MALFORMAT, " URL_MALFORMAT" },
97- {ErrorCode::NOT_BUILT_IN, " NOT_BUILT_IN" },
98- {ErrorCode::COULDNT_RESOLVE_PROXY, " COULDNT_RESOLVE_PROXY" },
99- {ErrorCode::COULDNT_RESOLVE_HOST, " COULDNT_RESOLVE_HOST" },
100- {ErrorCode::COULDNT_CONNECT, " COULDNT_CONNECT" },
101- {ErrorCode::WEIRD_SERVER_REPLY, " WEIRD_SERVER_REPLY" },
102- {ErrorCode::REMOTE_ACCESS_DENIED, " REMOTE_ACCESS_DENIED" },
103- {ErrorCode::HTTP2, " HTTP2" },
104- {ErrorCode::PARTIAL_FILE, " PARTIAL_FILE" },
105- {ErrorCode::QUOTE_ERROR, " QUOTE_ERROR" },
106- {ErrorCode::HTTP_RETURNED_ERROR, " HTTP_RETURNED_ERROR" },
107- {ErrorCode::WRITE_ERROR, " WRITE_ERROR" },
108- {ErrorCode::UPLOAD_FAILED, " UPLOAD_FAILED" },
109- {ErrorCode::READ_ERROR, " READ_ERROR" },
110- {ErrorCode::OUT_OF_MEMORY, " OUT_OF_MEMORY" },
111- {ErrorCode::OPERATION_TIMEDOUT, " OPERATION_TIMEDOUT" },
112- {ErrorCode::RANGE_ERROR, " RANGE_ERROR" },
113- {ErrorCode::HTTP_POST_ERROR, " HTTP_POST_ERROR" },
114- {ErrorCode::SSL_CONNECT_ERROR, " SSL_CONNECT_ERROR" },
115- {ErrorCode::BAD_DOWNLOAD_RESUME, " BAD_DOWNLOAD_RESUME" },
116- {ErrorCode::FILE_COULDNT_READ_FILE, " FILE_COULDNT_READ_FILE" },
117- {ErrorCode::FUNCTION_NOT_FOUND, " FUNCTION_NOT_FOUND" },
118- {ErrorCode::ABORTED_BY_CALLBACK, " ABORTED_BY_CALLBACK" },
119- {ErrorCode::BAD_FUNCTION_ARGUMENT, " BAD_FUNCTION_ARGUMENT" },
120- {ErrorCode::INTERFACE_FAILED, " INTERFACE_FAILED" },
121- {ErrorCode::TOO_MANY_REDIRECTS, " TOO_MANY_REDIRECTS" },
122- {ErrorCode::UNKNOWN_OPTION, " UNKNOWN_OPTION" },
123- {ErrorCode::SETOPT_OPTION_SYNTAX, " SETOPT_OPTION_SYNTAX" },
124- {ErrorCode::GOT_NOTHING, " GOT_NOTHING" },
125- {ErrorCode::SSL_ENGINE_NOTFOUND, " SSL_ENGINE_NOTFOUND" },
126- {ErrorCode::SSL_ENGINE_SETFAILED, " SSL_ENGINE_SETFAILED" },
127- {ErrorCode::SEND_ERROR, " SEND_ERROR" },
128- {ErrorCode::RECV_ERROR, " RECV_ERROR" },
129- {ErrorCode::SSL_CERTPROBLEM, " SSL_CERTPROBLEM" },
130- {ErrorCode::SSL_CIPHER, " SSL_CIPHER" },
131- {ErrorCode::PEER_FAILED_VERIFICATION, " PEER_FAILED_VERIFICATION" },
132- {ErrorCode::BAD_CONTENT_ENCODING, " BAD_CONTENT_ENCODING" },
133- {ErrorCode::FILESIZE_EXCEEDED, " FILESIZE_EXCEEDED" },
134- {ErrorCode::USE_SSL_FAILED, " USE_SSL_FAILED" },
135- {ErrorCode::SEND_FAIL_REWIND, " SEND_FAIL_REWIND" },
136- {ErrorCode::SSL_ENGINE_INITFAILED, " SSL_ENGINE_INITFAILED" },
137- {ErrorCode::LOGIN_DENIED, " LOGIN_DENIED" },
138- {ErrorCode::SSL_CACERT_BADFILE, " SSL_CACERT_BADFILE" },
139- {ErrorCode::SSL_SHUTDOWN_FAILED, " SSL_SHUTDOWN_FAILED" },
140- {ErrorCode::AGAIN, " AGAIN" },
141- {ErrorCode::SSL_CRL_BADFILE, " SSL_CRL_BADFILE" },
142- {ErrorCode::SSL_ISSUER_ERROR, " SSL_ISSUER_ERROR" },
143- {ErrorCode::CHUNK_FAILED, " CHUNK_FAILED" },
144- {ErrorCode::NO_CONNECTION_AVAILABLE, " NO_CONNECTION_AVAILABLE" },
145- {ErrorCode::SSL_PINNEDPUBKEYNOTMATCH, " SSL_PINNEDPUBKEYNOTMATCH" },
146- {ErrorCode::SSL_INVALIDCERTSTATUS, " SSL_INVALIDCERTSTATUS" },
147- {ErrorCode::HTTP2_STREAM, " HTTP2_STREAM" },
148- {ErrorCode::RECURSIVE_API_CALL, " RECURSIVE_API_CALL" },
149- {ErrorCode::AUTH_ERROR, " AUTH_ERROR" },
150- {ErrorCode::HTTP3, " HTTP3" },
151- {ErrorCode::QUIC_CONNECT_ERROR, " QUIC_CONNECT_ERROR" },
152- {ErrorCode::PROXY, " PROXY" },
153- {ErrorCode::SSL_CLIENTCERT, " SSL_CLIENTCERT" },
154- {ErrorCode::UNRECOVERABLE_POLL, " UNRECOVERABLE_POLL" },
155- {ErrorCode::TOO_LARGE, " TOO_LARGE" },
156- {ErrorCode::UNKNOWN_ERROR, " UNKNOWN_ERROR" }};
93+ inline const std::unordered_map<ErrorCode, std::string>& get_error_code_to_string_mapping () {
94+ // Use a function-local static rather than inline global objects to avoid the 'double-destructor' problem in MSVC when using /MT flags.
95+ static const std::unordered_map<ErrorCode, std::string> mapping = {{ErrorCode::OK, " OK" },
96+ {ErrorCode::UNSUPPORTED_PROTOCOL, " UNSUPPORTED_PROTOCOL" },
97+ {ErrorCode::FAILED_INIT, " FAILED_INIT" },
98+ {ErrorCode::URL_MALFORMAT, " URL_MALFORMAT" },
99+ {ErrorCode::NOT_BUILT_IN, " NOT_BUILT_IN" },
100+ {ErrorCode::COULDNT_RESOLVE_PROXY, " COULDNT_RESOLVE_PROXY" },
101+ {ErrorCode::COULDNT_RESOLVE_HOST, " COULDNT_RESOLVE_HOST" },
102+ {ErrorCode::COULDNT_CONNECT, " COULDNT_CONNECT" },
103+ {ErrorCode::WEIRD_SERVER_REPLY, " WEIRD_SERVER_REPLY" },
104+ {ErrorCode::REMOTE_ACCESS_DENIED, " REMOTE_ACCESS_DENIED" },
105+ {ErrorCode::HTTP2, " HTTP2" },
106+ {ErrorCode::PARTIAL_FILE, " PARTIAL_FILE" },
107+ {ErrorCode::QUOTE_ERROR, " QUOTE_ERROR" },
108+ {ErrorCode::HTTP_RETURNED_ERROR, " HTTP_RETURNED_ERROR" },
109+ {ErrorCode::WRITE_ERROR, " WRITE_ERROR" },
110+ {ErrorCode::UPLOAD_FAILED, " UPLOAD_FAILED" },
111+ {ErrorCode::READ_ERROR, " READ_ERROR" },
112+ {ErrorCode::OUT_OF_MEMORY, " OUT_OF_MEMORY" },
113+ {ErrorCode::OPERATION_TIMEDOUT, " OPERATION_TIMEDOUT" },
114+ {ErrorCode::RANGE_ERROR, " RANGE_ERROR" },
115+ {ErrorCode::HTTP_POST_ERROR, " HTTP_POST_ERROR" },
116+ {ErrorCode::SSL_CONNECT_ERROR, " SSL_CONNECT_ERROR" },
117+ {ErrorCode::BAD_DOWNLOAD_RESUME, " BAD_DOWNLOAD_RESUME" },
118+ {ErrorCode::FILE_COULDNT_READ_FILE, " FILE_COULDNT_READ_FILE" },
119+ {ErrorCode::FUNCTION_NOT_FOUND, " FUNCTION_NOT_FOUND" },
120+ {ErrorCode::ABORTED_BY_CALLBACK, " ABORTED_BY_CALLBACK" },
121+ {ErrorCode::BAD_FUNCTION_ARGUMENT, " BAD_FUNCTION_ARGUMENT" },
122+ {ErrorCode::INTERFACE_FAILED, " INTERFACE_FAILED" },
123+ {ErrorCode::TOO_MANY_REDIRECTS, " TOO_MANY_REDIRECTS" },
124+ {ErrorCode::UNKNOWN_OPTION, " UNKNOWN_OPTION" },
125+ {ErrorCode::SETOPT_OPTION_SYNTAX, " SETOPT_OPTION_SYNTAX" },
126+ {ErrorCode::GOT_NOTHING, " GOT_NOTHING" },
127+ {ErrorCode::SSL_ENGINE_NOTFOUND, " SSL_ENGINE_NOTFOUND" },
128+ {ErrorCode::SSL_ENGINE_SETFAILED, " SSL_ENGINE_SETFAILED" },
129+ {ErrorCode::SEND_ERROR, " SEND_ERROR" },
130+ {ErrorCode::RECV_ERROR, " RECV_ERROR" },
131+ {ErrorCode::SSL_CERTPROBLEM, " SSL_CERTPROBLEM" },
132+ {ErrorCode::SSL_CIPHER, " SSL_CIPHER" },
133+ {ErrorCode::PEER_FAILED_VERIFICATION, " PEER_FAILED_VERIFICATION" },
134+ {ErrorCode::BAD_CONTENT_ENCODING, " BAD_CONTENT_ENCODING" },
135+ {ErrorCode::FILESIZE_EXCEEDED, " FILESIZE_EXCEEDED" },
136+ {ErrorCode::USE_SSL_FAILED, " USE_SSL_FAILED" },
137+ {ErrorCode::SEND_FAIL_REWIND, " SEND_FAIL_REWIND" },
138+ {ErrorCode::SSL_ENGINE_INITFAILED, " SSL_ENGINE_INITFAILED" },
139+ {ErrorCode::LOGIN_DENIED, " LOGIN_DENIED" },
140+ {ErrorCode::SSL_CACERT_BADFILE, " SSL_CACERT_BADFILE" },
141+ {ErrorCode::SSL_SHUTDOWN_FAILED, " SSL_SHUTDOWN_FAILED" },
142+ {ErrorCode::AGAIN, " AGAIN" },
143+ {ErrorCode::SSL_CRL_BADFILE, " SSL_CRL_BADFILE" },
144+ {ErrorCode::SSL_ISSUER_ERROR, " SSL_ISSUER_ERROR" },
145+ {ErrorCode::CHUNK_FAILED, " CHUNK_FAILED" },
146+ {ErrorCode::NO_CONNECTION_AVAILABLE, " NO_CONNECTION_AVAILABLE" },
147+ {ErrorCode::SSL_PINNEDPUBKEYNOTMATCH, " SSL_PINNEDPUBKEYNOTMATCH" },
148+ {ErrorCode::SSL_INVALIDCERTSTATUS, " SSL_INVALIDCERTSTATUS" },
149+ {ErrorCode::HTTP2_STREAM, " HTTP2_STREAM" },
150+ {ErrorCode::RECURSIVE_API_CALL, " RECURSIVE_API_CALL" },
151+ {ErrorCode::AUTH_ERROR, " AUTH_ERROR" },
152+ {ErrorCode::HTTP3, " HTTP3" },
153+ {ErrorCode::QUIC_CONNECT_ERROR, " QUIC_CONNECT_ERROR" },
154+ {ErrorCode::PROXY, " PROXY" },
155+ {ErrorCode::SSL_CLIENTCERT, " SSL_CLIENTCERT" },
156+ {ErrorCode::UNRECOVERABLE_POLL, " UNRECOVERABLE_POLL" },
157+ {ErrorCode::TOO_LARGE, " TOO_LARGE" },
158+ {ErrorCode::UNKNOWN_ERROR, " UNKNOWN_ERROR" }};
159+ return mapping;
160+ }
157161
158162class Error {
159163 public:
@@ -176,7 +180,7 @@ class Error {
176180
177181namespace std {
178182inline std::string to_string (const cpr::ErrorCode& code) {
179- return cpr::error_code_to_string_mapping .at (code);
183+ return cpr::get_error_code_to_string_mapping () .at (code);
180184}
181185} // namespace std
182186
0 commit comments