std::deque so far as the standard is concerned is just fine and I can't think of many reasons someone would complain about it in the abstract sense.
However, some actual standard library implementations of deque tend to be quite bad in terms of cache usage and memory allocations and may only offer a small linear improvement over using std::list.
Those std::deque implementations use a chain of chunks to implement deque but use relatively small chunk sizes. This means that it only takes a few unbalanced push operations to cause a new allocation, and also means that iterating the container requires jumping through a lot of disjoint memory blocks. These are roughly the same performance problems that std::list suffers from. Going from a guaranteed unique block per element for a list to a small handful of items per block in a std::deque is useful enough for some folks, but falls far short of the required efficiency of many users. The per-element space savings is likewise pretty small for a deque vs a list in those implementations.
You can avoid the memory allocation problems if you stick to mostly balanced push/pop operations on most of those implementations. That is, if you're mostly alternating between push/pop then you won't get a ton of allocations (just about all the implementations will recycle at least one chunk) and if you're not planning to iterate the container often then the disjoint allocations won't matter a ton. If you have long chains of pushes followed by long chains of pops, however, then you are more likely going to run into excessive allocation/deallocation problems.
Replacing your implementation's std::deque with a hand-rolled (still fully standard-compliant) version that uses much larger chunks (e.g. 4k/pages or the like) can provide some rather large performance benefits, depending on just what you're doing. I also don't know if anyone's done any _recent_ analysis of std::deque implementation in this light; a lot of us were forced to avoid it in years past and just continue to do so, either out of habit or because we're using some complete STL replacement that's more reliably optimized for our target uses and hardware.
If you're not measuring any real perf problems with std::deque for your uses though then there's no compelling reason for you to replace it.