Cómo utilizar el tipo de retorno final con un miembro de clase con plantilla

Estoy tratando de implementar la siguiente clase:

template <typename Container>
class reverse_adaptor
{
public: // Construction
    reverse_adaptor(Container &container) :
        m_container(container)
    {}

public: // STL container static polymorphism
    auto begin() const -> decltype(m_container.rbegin())
    {
        return m_container.rbegin();
    }

    auto end() const -> decltype(m_container.rend())
    {
        return m_container.rend();
    }

private: // Members
    Container &m_container;
};

La razón por la que estoy usando el tipo de retorno final es porque no sé si m_container será constante o no, así que dejo que el compilador lo resuelva por mí. Sin embargo, estoy recibiendo los siguientes errores del compilador:

/Users/mark/Blah/Stdx.h:77:40: Ningún miembro llamado 'm_container' en 'stdx :: reverse_adaptor>>'

Pensé que podría estar relacionado con el paso de múltiples etapas de los tipos de plantilla, así que lo cambié para leerdecltype(this->m_container.rbegin()), pero eso tampoco funcionó.

¿Cómo puedo conseguir que esto funcione?

Ejemplo -http://ideone.com/ekVYlH

Respuestas a la pregunta(2)

Su respuesta a la pregunta