Use `decltype` to further reduce the explicit type declarations