c++: fix contracts with NRV