This line in type_traits.h
template <typename T>
using result_of_t = typename std::result_of<T>::type;
Does not compile on MSVC because std::result_of was removed
I think you are supposed to use std::invoke_result, but switching to it just results in other compilation issues