2 * Copyright Andrey Semashev 2007 - 2015.
3 * Distributed under the Boost Software License, Version 1.0.
4 * (See accompanying file LICENSE_1_0.txt or copy at
5 * http://www.boost.org/LICENSE_1_0.txt)
9 * \author Andrey Semashev
12 * \brief This header is the Boost.Log library implementation, see the library documentation
13 * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
16 #include <boost/log/detail/config.hpp>
17 #include <boost/throw_exception.hpp>
18 #include <boost/exception/exception.hpp>
19 #include <boost/exception/errinfo_at_line.hpp>
20 #include <boost/exception/info.hpp>
21 #include <boost/log/exceptions.hpp>
22 #include <boost/log/support/exception.hpp>
23 #include <boost/log/detail/header.hpp>
27 // conversion from 'size_t' to 'boost::error_info<boost::throw_line_,int>::value_type', possible loss of data
28 // No idea why line number is stored as a signed integer in the error info...
29 #pragma warning(disable: 4267)
34 BOOST_LOG_OPEN_NAMESPACE
38 //! Attaches attribute name exception information
39 BOOST_LOG_API void attach_attribute_name_info(exception& e, attribute_name const& name)
41 e << attribute_name_info(name);
46 bad_alloc::bad_alloc(const char* descr) :
51 bad_alloc::bad_alloc(std::string const& descr) :
56 bad_alloc::~bad_alloc() throw()
60 const char* bad_alloc::what() const throw()
62 return m_message.c_str();
65 void bad_alloc::throw_(const char* file, std::size_t line, const char* descr)
67 boost::throw_exception(boost::enable_error_info(bad_alloc(descr))
68 << boost::throw_file(file)
69 << boost::throw_line(line)
73 void bad_alloc::throw_(const char* file, std::size_t line, std::string const& descr)
75 boost::throw_exception(boost::enable_error_info(bad_alloc(descr))
76 << boost::throw_file(file)
77 << boost::throw_line(line)
81 capacity_limit_reached::capacity_limit_reached(const char* descr) :
86 capacity_limit_reached::capacity_limit_reached(std::string const& descr) :
91 capacity_limit_reached::~capacity_limit_reached() throw()
95 void capacity_limit_reached::throw_(const char* file, std::size_t line, const char* descr)
97 boost::throw_exception(boost::enable_error_info(capacity_limit_reached(descr))
98 << boost::throw_file(file)
99 << boost::throw_line(line)
103 void capacity_limit_reached::throw_(const char* file, std::size_t line, std::string const& descr)
105 boost::throw_exception(boost::enable_error_info(capacity_limit_reached(descr))
106 << boost::throw_file(file)
107 << boost::throw_line(line)
111 runtime_error::runtime_error(std::string const& descr) :
112 std::runtime_error(descr)
116 runtime_error::~runtime_error() throw()
120 missing_value::missing_value() :
121 runtime_error("Requested value not found")
125 missing_value::missing_value(std::string const& descr) :
130 missing_value::~missing_value() throw()
134 void missing_value::throw_(const char* file, std::size_t line)
136 boost::throw_exception(boost::enable_error_info(missing_value())
137 << boost::throw_file(file)
138 << boost::throw_line(line)
142 void missing_value::throw_(const char* file, std::size_t line, const char* descr)
144 boost::throw_exception(boost::enable_error_info(missing_value(descr))
145 << boost::throw_file(file)
146 << boost::throw_line(line)
150 void missing_value::throw_(const char* file, std::size_t line, std::string const& descr)
152 boost::throw_exception(boost::enable_error_info(missing_value(descr))
153 << boost::throw_file(file)
154 << boost::throw_line(line)
158 void missing_value::throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name)
160 boost::throw_exception(boost::enable_error_info(missing_value(descr))
161 << boost::throw_file(file)
162 << boost::throw_line(line)
163 << attribute_name_info(name)
167 void missing_value::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name)
169 boost::throw_exception(boost::enable_error_info(missing_value(descr))
170 << boost::throw_file(file)
171 << boost::throw_line(line)
172 << attribute_name_info(name)
176 invalid_type::invalid_type() :
177 runtime_error("Requested value has invalid type")
181 invalid_type::invalid_type(std::string const& descr) :
186 invalid_type::~invalid_type() throw()
190 void invalid_type::throw_(const char* file, std::size_t line)
192 boost::throw_exception(boost::enable_error_info(invalid_type())
193 << boost::throw_file(file)
194 << boost::throw_line(line)
198 void invalid_type::throw_(const char* file, std::size_t line, const char* descr)
200 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
201 << boost::throw_file(file)
202 << boost::throw_line(line)
206 void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr)
208 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
209 << boost::throw_file(file)
210 << boost::throw_line(line)
214 void invalid_type::throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name)
216 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
217 << boost::throw_file(file)
218 << boost::throw_line(line)
219 << attribute_name_info(name)
223 void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name)
225 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
226 << boost::throw_file(file)
227 << boost::throw_line(line)
228 << attribute_name_info(name)
232 void invalid_type::throw_(const char* file, std::size_t line, const char* descr, typeindex::type_index const& type)
234 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
235 << boost::throw_file(file)
236 << boost::throw_line(line)
237 << type_info_info(type)
241 void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr, typeindex::type_index const& type)
243 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
244 << boost::throw_file(file)
245 << boost::throw_line(line)
246 << type_info_info(type)
250 void invalid_type::throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name, typeindex::type_index const& type)
252 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
253 << boost::throw_file(file)
254 << boost::throw_line(line)
255 << attribute_name_info(name)
256 << type_info_info(type)
260 void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name, typeindex::type_index const& type)
262 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
263 << boost::throw_file(file)
264 << boost::throw_line(line)
265 << attribute_name_info(name)
266 << type_info_info(type)
270 invalid_value::invalid_value() :
271 runtime_error("The value is invalid")
275 invalid_value::invalid_value(std::string const& descr) :
280 invalid_value::~invalid_value() throw()
284 void invalid_value::throw_(const char* file, std::size_t line)
286 boost::throw_exception(boost::enable_error_info(invalid_value())
287 << boost::throw_file(file)
288 << boost::throw_line(line)
292 void invalid_value::throw_(const char* file, std::size_t line, const char* descr)
294 boost::throw_exception(boost::enable_error_info(invalid_value(descr))
295 << boost::throw_file(file)
296 << boost::throw_line(line)
300 void invalid_value::throw_(const char* file, std::size_t line, std::string const& descr)
302 boost::throw_exception(boost::enable_error_info(invalid_value(descr))
303 << boost::throw_file(file)
304 << boost::throw_line(line)
308 parse_error::parse_error() :
309 runtime_error("Failed to parse content")
313 parse_error::parse_error(std::string const& descr) :
318 parse_error::~parse_error() throw()
322 void parse_error::throw_(const char* file, std::size_t line)
324 boost::throw_exception(boost::enable_error_info(parse_error())
325 << boost::throw_file(file)
326 << boost::throw_line(line)
330 void parse_error::throw_(const char* file, std::size_t line, const char* descr)
332 boost::throw_exception(boost::enable_error_info(parse_error(descr))
333 << boost::throw_file(file)
334 << boost::throw_line(line)
338 void parse_error::throw_(const char* file, std::size_t line, std::string const& descr)
340 boost::throw_exception(boost::enable_error_info(parse_error(descr))
341 << boost::throw_file(file)
342 << boost::throw_line(line)
346 void parse_error::throw_(const char* file, std::size_t line, const char* descr, std::size_t content_line)
348 boost::throw_exception(boost::enable_error_info(parse_error(descr))
349 << boost::throw_file(file)
350 << boost::throw_line(line)
351 << boost::errinfo_at_line(content_line)
355 void parse_error::throw_(const char* file, std::size_t line, std::string const& descr, std::size_t content_line)
357 boost::throw_exception(boost::enable_error_info(parse_error(descr))
358 << boost::throw_file(file)
359 << boost::throw_line(line)
360 << boost::errinfo_at_line(content_line)
364 void parse_error::throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name)
366 boost::throw_exception(boost::enable_error_info(parse_error(descr))
367 << boost::throw_file(file)
368 << boost::throw_line(line)
369 << attribute_name_info(name)
373 void parse_error::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name)
375 boost::throw_exception(boost::enable_error_info(parse_error(descr))
376 << boost::throw_file(file)
377 << boost::throw_line(line)
378 << attribute_name_info(name)
382 conversion_error::conversion_error() :
383 runtime_error("Failed to perform conversion")
387 conversion_error::conversion_error(std::string const& descr) :
392 conversion_error::~conversion_error() throw()
396 void conversion_error::throw_(const char* file, std::size_t line)
398 boost::throw_exception(boost::enable_error_info(conversion_error())
399 << boost::throw_file(file)
400 << boost::throw_line(line)
404 void conversion_error::throw_(const char* file, std::size_t line, const char* descr)
406 boost::throw_exception(boost::enable_error_info(conversion_error(descr))
407 << boost::throw_file(file)
408 << boost::throw_line(line)
412 void conversion_error::throw_(const char* file, std::size_t line, std::string const& descr)
414 boost::throw_exception(boost::enable_error_info(conversion_error(descr))
415 << boost::throw_file(file)
416 << boost::throw_line(line)
420 system_error::system_error(boost::system::error_code code, std::string const& descr) :
421 boost::system::system_error(code, descr)
425 system_error::~system_error() throw()
429 void system_error::throw_(const char* file, std::size_t line, const char* descr, int system_error_code)
431 boost::throw_exception(boost::enable_error_info(system_error(boost::system::error_code(system_error_code, boost::system::system_category()), descr))
432 << boost::throw_file(file)
433 << boost::throw_line(line)
437 void system_error::throw_(const char* file, std::size_t line, std::string const& descr, int system_error_code)
439 boost::throw_exception(boost::enable_error_info(system_error(boost::system::error_code(system_error_code, boost::system::system_category()), descr))
440 << boost::throw_file(file)
441 << boost::throw_line(line)
445 void system_error::throw_(const char* file, std::size_t line, const char* descr, boost::system::error_code code)
447 boost::throw_exception(boost::enable_error_info(system_error(code, descr))
448 << boost::throw_file(file)
449 << boost::throw_line(line)
453 void system_error::throw_(const char* file, std::size_t line, std::string const& descr, boost::system::error_code code)
455 boost::throw_exception(boost::enable_error_info(system_error(code, descr))
456 << boost::throw_file(file)
457 << boost::throw_line(line)
461 logic_error::logic_error(std::string const& descr) :
462 std::logic_error(descr)
466 logic_error::~logic_error() throw()
470 void logic_error::throw_(const char* file, std::size_t line, const char* descr)
472 boost::throw_exception(boost::enable_error_info(logic_error(descr))
473 << boost::throw_file(file)
474 << boost::throw_line(line)
478 void logic_error::throw_(const char* file, std::size_t line, std::string const& descr)
480 boost::throw_exception(boost::enable_error_info(logic_error(descr))
481 << boost::throw_file(file)
482 << boost::throw_line(line)
486 odr_violation::odr_violation() :
487 logic_error("ODR violation detected")
491 odr_violation::odr_violation(std::string const& descr) :
496 odr_violation::~odr_violation() throw()
500 void odr_violation::throw_(const char* file, std::size_t line)
502 boost::throw_exception(boost::enable_error_info(odr_violation())
503 << boost::throw_file(file)
504 << boost::throw_line(line)
508 void odr_violation::throw_(const char* file, std::size_t line, const char* descr)
510 boost::throw_exception(boost::enable_error_info(odr_violation(descr))
511 << boost::throw_file(file)
512 << boost::throw_line(line)
516 void odr_violation::throw_(const char* file, std::size_t line, std::string const& descr)
518 boost::throw_exception(boost::enable_error_info(odr_violation(descr))
519 << boost::throw_file(file)
520 << boost::throw_line(line)
524 unexpected_call::unexpected_call() :
525 logic_error("Invalid call sequence")
529 unexpected_call::unexpected_call(std::string const& descr) :
534 unexpected_call::~unexpected_call() throw()
538 void unexpected_call::throw_(const char* file, std::size_t line)
540 boost::throw_exception(boost::enable_error_info(unexpected_call())
541 << boost::throw_file(file)
542 << boost::throw_line(line)
546 void unexpected_call::throw_(const char* file, std::size_t line, const char* descr)
548 boost::throw_exception(boost::enable_error_info(unexpected_call(descr))
549 << boost::throw_file(file)
550 << boost::throw_line(line)
554 void unexpected_call::throw_(const char* file, std::size_t line, std::string const& descr)
556 boost::throw_exception(boost::enable_error_info(unexpected_call(descr))
557 << boost::throw_file(file)
558 << boost::throw_line(line)
562 setup_error::setup_error() :
563 logic_error("The library is not initialized properly")
567 setup_error::setup_error(std::string const& descr) :
572 setup_error::~setup_error() throw()
576 void setup_error::throw_(const char* file, std::size_t line)
578 boost::throw_exception(boost::enable_error_info(setup_error())
579 << boost::throw_file(file)
580 << boost::throw_line(line)
584 void setup_error::throw_(const char* file, std::size_t line, const char* descr)
586 boost::throw_exception(boost::enable_error_info(setup_error(descr))
587 << boost::throw_file(file)
588 << boost::throw_line(line)
592 void setup_error::throw_(const char* file, std::size_t line, std::string const& descr)
594 boost::throw_exception(boost::enable_error_info(setup_error(descr))
595 << boost::throw_file(file)
596 << boost::throw_line(line)
600 limitation_error::limitation_error() :
601 logic_error("Boost.Log library limit reached")
605 limitation_error::limitation_error(std::string const& descr) :
610 limitation_error::~limitation_error() throw()
614 void limitation_error::throw_(const char* file, std::size_t line)
616 boost::throw_exception(boost::enable_error_info(limitation_error())
617 << boost::throw_file(file)
618 << boost::throw_line(line)
622 void limitation_error::throw_(const char* file, std::size_t line, const char* descr)
624 boost::throw_exception(boost::enable_error_info(limitation_error(descr))
625 << boost::throw_file(file)
626 << boost::throw_line(line)
630 void limitation_error::throw_(const char* file, std::size_t line, std::string const& descr)
632 boost::throw_exception(boost::enable_error_info(limitation_error(descr))
633 << boost::throw_file(file)
634 << boost::throw_line(line)
638 BOOST_LOG_CLOSE_NAMESPACE // namespace log
646 #include <boost/log/detail/footer.hpp>