Fast, generalized, implementation of the Chase-Lev lock-free work-stealing deque for C++17
At the expense of requiring types to be trivially destructible the deque can now store more general types without allocating on each push.
This version detects types that can be stored directly in the ring buffer (std::atomic<T>::is_always_lock_free && std::is_trivially_destructible_v<T> == true
) and no longer allocates heap storage when this is the case.