32 #ifndef VSMC_INTERNAL_ASSERT_HPP
33 #define VSMC_INTERNAL_ASSERT_HPP
42 #if VSMC_NO_STATIC_ASSERT
43 #define VSMC_STATIC_ASSERT(cond, msg)
44 #else // VSMC_NO_STATIC_ASSERT
45 #if VSMC_HAS_CXX11_STATIC_ASSERT
46 #define VSMC_STATIC_ASSERT(cond, msg) static_assert(cond, #msg)
47 #else // VSMC_HAS_CXX11_STATIC_ASSERT
48 #define VSMC_STATIC_ASSERT(cond, msg) \
50 struct VSMC_STATIC_ASSERT_FAILURE {enum msg {err};}; \
51 vsmc::internal::StaticAssert<static_cast<bool>(cond)>::test( \
52 VSMC_STATIC_ASSERT_FAILURE::err); \
54 #endif // VSMC_HAS_CXX11_STATIC_ASSERT
55 #endif // VSMC_NO_STATIC_ASSERT
57 #if VSMC_NO_RUNTIME_ASSERT
58 #define VSMC_RUNTIME_ASSERT(cond, msg)
59 #else // VSMC_NO_RUNTIME_ASSERT
60 #if VSMC_RUNTIME_ASSERT_AS_EXCEPTION
61 #define VSMC_RUNTIME_ASSERT(cond, msg) \
62 { if (!(cond)) { throw vsmc::RuntimeAssert(msg); }; }
63 #else // VSMC_RUNTIME_ASSERT_AS_EXCEPTION
64 #define VSMC_RUNTIME_ASSERT(cond, msg) \
67 std::fprintf(stderr, \
68 "vSMC runtime assertion failed; File: %s; Line: %d\n%s\n", \
69 __FILE__, __LINE__, msg); \
70 std::fflush(stderr); \
74 #endif // VSMC_RUNTIME_ASSERT_AS_EXCEPTION
75 #endif // VSMC_NO_RUNTIME_ASSERT
77 #if VSMC_NO_RUNTIME_WARNING
78 #define VSMC_RUNTIME_WARNING(cond, msg)
79 #else // VSMC_NO_RUNTIME_WARNING
80 #if VSMC_RUNTIME_WARNING_AS_EXCEPTION
81 #define VSMC_RUNTIME_WARNING(cond, msg) \
82 { if (!(cond)) { throw vsmc::RuntimeWarning(msg); }; }
83 #else // VSMC_RUNTIME_WARNING_AS_EXCEPTION
84 #define VSMC_RUNTIME_WARNING(cond, msg) \
87 std::fprintf(stderr, \
88 "vSMC runtime warning; File: %s; Line: %d\n%s\n", \
89 __FILE__, __LINE__, msg); \
90 std::fflush(stderr); \
93 #endif // VSMC_RUNTIME_WARNING_AS_EXCEPTION
94 #endif // VSMC_NO_RUNTIME_WARNING
112 std::runtime_error(msg) {}
115 std::runtime_error(msg) {}
123 std::runtime_error(msg) {}
126 std::runtime_error(msg) {}
131 #endif // VSMC_INTERNAL_ASSERT_HPP
RuntimeAssert(const std::string &msg)
RuntimeWarning(const char *msg)
RuntimeAssert(const char *msg)
RuntimeWarning(const std::string &msg)