c++: fix throwing cleanup with label