Use <type_traits> from std if they exist
Use static_assert instead of boost equivalents