¿Se debe inicializar un tipo de referencia en la lista de inicialización del constructor?

Como auto-ejercicio, he escrito este sencillo código:

#include <iostream>

int gIndex = 3;

template <class T> class Array
{
public:
    explicit Array(int size);
    T& operator[](int i) { return m_data[i]; }
    T operator[](int i) const { return m_data[i]; }
    T getAnchorPoint() const { return m_data[m_anchor]; }
private:
    T* m_data;
    int m_size;
    int& m_anchor;
};

template <class T> Array<T>::Array(int size) : m_size(size), m_data(new T[size])
{
    memset(m_data, 0, size*sizeof(T));
    m_anchor = gIndex;
}

int main()
{
    Array<double> a(10);
    return 0;
}

Recibí un error de compilación, que dice:

error C2758: 'Array<T>::m_anchor' : must be initialized in constructor base/member initializer list

Nunca ha sucedido, lo que me lleva a hacer esta pregunta:

¿Se debe inicializar cualquier tipo de referencia clase-miembro en la lista de inicialización del constructor?

Si es así, ¿por qué? ¿Está esto relacionado de alguna manera con el hecho de que un tipo de referencia nunca puede ser reasignado?

¿Hay más tipos que deben inicializarse en la lista de inicialización del constructor?

Respuestas a la pregunta(3)

Su respuesta a la pregunta