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