#include template class threadsafe_queue { public: threadsafe_queue(); threadsafe_queue(const threadsafe_queue&); threadsafe_queue& operator=(const threadsafe_queue&) = delete; void push(T new_value); bool try_pop(T& value); std::shared_ptr try_pop(); void wait_and_pop(T& value); std::shared_ptr wait_and_pop(); bool empty() const; }; int main() { }