gcc, clang, and MSVC are all happpy with this solution now