Lockless Queue Multiple-Reader Singler-Writer in C++
This line seems really strange to me:

static_assert(N!=0x80000000,"N is too large.");


Technically, it is rather odd to just compare for equality with one big number where there could be numbers even bigger. Didn't you mean:

static_assert(N &gt;= 0x80000000, "N is too large.");




const uint32_t MASK = 2*N-1;


Since all the values in this line are known at compile time and MASK is apparently not meant to be changed, you should consider making it both static and constexpr:

static constexpr uin32_t MASK = 2*N-1;




That's kind of trivial, but you can also use curly braces instead of parenthesis in your constructor initialization list:

RnW1FifoFixed():
    m_array{new T[N]},
    m_read{0},
    m_write{0}
{
    // ...
}