#include #include #include class Interval { int first_; int last_; public: Interval(int first, int last) : first_(first), last_(last) { if (first > last) throw std::invalid_argument("reversed interval"); } bool contains(int value) const { return first_ <= value && value < last_; } }; int main() { const Interval work(3, 7); assert(work.contains(3)); assert(!work.contains(7)); const Interval empty(4, 4); assert(!empty.contains(4)); bool rejected = false; try { const Interval invalid(7, 3); (void)invalid; } catch (const std::invalid_argument&) { rejected = true; } assert(rejected); std::cout << "interval invariant preserved\n"; }