Effects:
deref_tmp = current; --deref_tmp; return *deref_tmp;
[ Note: This operation must use an auxiliary member variable rather than a temporary variable to avoid returning a reference that persists beyond the lifetime of its associated iterator. (See [iterator.requirements].) — end note ]