open_reading does not throw, but returns an error_code in a sane way
move error_or to a new header
error_or::value is useful when called on an rvalue
inotify_observable::watch uses error_or instead of overloading