The only time you will try to extract operation is when the stream fails to retrieve numericValue. When a stream fails it stays in failure mode until it is manually reset, and when a stream is in a fail state it will not process more information.
Perhaps something like:
1 2 3 4 5 6 7 8 9 10 11 12 13
std::stringstream ss(std::stringstream::in | std::stringstream::out);
ss << s;
unsignedlong numericValue = 0;
string operation = "";
while (ss >> numericValue >> operation)
{
list.push(numericValue);
/*
further operation based on the string values
*/
}