1#ifndef BANDIT_ASSERTION_EXCEPTION_H
2#define BANDIT_ASSERTION_EXCEPTION_H
3
4#include <stdexcept>
5#include <string>
6
7namespace bandit {
8 namespace detail {
9 struct assertion_exception : public std::runtime_error {
10 assertion_exception(const std::string& message,
11 const std::string& filename, const unsigned int linenumber)
12 : std::runtime_error(message), file_name_(filename), line_number_(linenumber) {}
13
14 assertion_exception(const std::string& message)
15 : std::runtime_error(message), line_number_(0) {}
16
17 // To make gcc < 4.7 happy.
18 assertion_exception(const assertion_exception&) = default;
19
20#ifndef _MSC_VER
21 assertion_exception(assertion_exception&&) = default;
22#else
23 assertion_exception(assertion_exception&& other)
24 : std::runtime_error(other), file_name_(), line_number_(other.line_number_) {
25 std::swap(file_name_, other.file_name_);
26 }
27#endif
28
29 virtual ~assertion_exception() noexcept {}
30
31 const std::string& file_name() const {
32 return file_name_;
33 }
34
35 unsigned int line_number() const {
36 return line_number_;
37 }
38
39 private:
40 std::string file_name_;
41 unsigned int line_number_;
42 };
43 }
44}
45#endif
46