Tell us about the data. Is each item large or small? Is it a fixed size or highly variable? The problem with disk storage is that as the items become more varied in size the more the problem begins to resemble a database problem. In which case you should probably look into something like a sqllite database as the backing store to your queue. Then you can just use SQL to pull the first record out.
If the data is really large you could just store each object on the filesystem using ever incrementing filename. Then you don't even need to store the queue in memory. The file date becomes your FIFO order. Just grab the oldest file in the directory to pull the first item off the "stack".
Finally if the data is small and numerous, you might consider overriding the Allocator of a std::list or std::deque. It might be possible to hide the file IO in the Allocator class. I don't have simple solution for the small and numerous data instance.