GCC now works too, neither &&, &, nor &= work cross-platform, going with >>= also added typename_of