moved cpp stuff out to its own header