Naive lock free work stealing queue
Pop() has problem
Consider what happens if your queue is in the following state with two jobs:
m_top    = 0
m_bottom = 2

The owner thread calls pop(), and loads in to local variables:
top    = 0
bottom = 2

Now, before the owner thread does anything else, two stealer threads call steal(), leaving the state of the queue like this:
m_top    = 2
m_bottom = 2

When the owner thread continues inside of pop(), it will go into this case and return a job that no longer exists:

    if(top &lt; (bottom - 1)) 
    {
        m_bottom.fetch_sub(1, std::memory_order_release);
        return job;   
    }


Your code deviated from the code you linked.  In the linked code, the first thing that pop() did was to decrement m_bottom so that the stealer threads could not steal the bottom job.