What happens here is a ctor dtor mismatch.
A temporary of a Refcounted is created inside a function where the file not found exception is thrown.
The dtor is called on that temporary, which is basically a ref of the refcounted since the refcounted has ref semantics on the count.
when the execption passes up a level the destructor of the actual refcouted value is called. which tries to decrement the refcount again.