The canonical way is to construct a new interval and assign it to your interval because boost::lcl::discrete_interval
is immutable (apart from the assignment operator). So to shift an interval you have to create a new interval with the desired lower and upper bounds and assign it to the old interval.
boost::icl::discrete_interval<int> interval;
interval = boost::icl::discrete_interval<int>::closed(3, 4);