I am trying to implement a thread-safe deque in C++.
`ThreadSafeDeque` will be used by a `FileLogger` class.
When threads call the `log()` function of `FileLogger` the messages will be `push_back()`ed to `ThreadSafeDeque` and return almost immediately. In a separate thread the FileLogger will `pop_front()` messages and write them to a file in its own pace.
Am I doing things correctly below?

    #pragma once
    #include <deque>
    #include <mutex>
    template<class T>
    class ThreadSafeDeque {
    public:
    	void pop_front_waiting(T &t) {
    		// unique_lock can be unlocked, lock_guard can not
    		std::unique_lock<std::mutex> lock{ mutex }; // locks
    		while(deque.empty()) {
    			condition.wait(lock); // unlocks, sleeps and relocks when woken up  
    		}
    		t = deque.front();
    		deque.pop_front();
    	} // unlocks as goes out of scope
    
    	void push_back(const T &t) {
    		std::unique_lock<std::mutex> lock{ mutex }; 
    		deque.push_back(t);
    		lock.unlock();
    		condition.notify_one(); // wakes up pop_front_waiting  
    	}
    private:
    	std::deque<T>               deque;
    	std::mutex                  mutex;
    	std::condition_variable condition;
    };