The idea makes sense to me. I haven't reviewed the whole change.
https://codereview.appspot.com/571980043/diff/579590043/lily/skyline.cc File lily/skyline.cc (right): https://codereview.appspot.com/571980043/diff/579590043/lily/skyline.cc#newcode100 lily/skyline.cc:100: x_[START] = start; Initialize x_ in a member initializer list instead of allowing it to be default-initialized and then assigning it here. https://codereview.appspot.com/571980043/diff/579590043/lily/skyline.cc#newcode107 lily/skyline.cc:107: Real start = b[horizon_axis][LEFT]; simplify here too Building::Building (Box const &b, Axis horizon_axis, Direction sky) : x_ (b[horizon_axis]) { Real height = sky * b[other_axis (horizon_axis)][sky]; precompute (x_[LEFT], height, height, x_[RIGHT]); } https://codereview.appspot.com/571980043/