The validity checks are performed in precall callback.
Semantic of checking for opened stream has changed:
It is not allowed at all to use the stream after 'fclose'.
This is what cppreference.com says at fclose.
So the double-close error changes to use-after-close.
You could make this a method of FnDescription.