Когда необходимо использовать std :: ref?

Рассматривать:

std::tuple<int , const A&> func (const A& a) 
{
  return std::make_tuple( 0 , std::ref(a) );
}

Этоstd::ref требуется для написания правильного и переносимого кода? (Без него компилируется нормально)

Фон:

Если я удалюstd::ref мой код работает нормально без каких-либо предупреждений (g++-4.6 -Wall), но работает неправильно.

В случае интереса определениеA:

struct A {
  std::array<int,2> vec;
  typedef int type_t;

  template<typename... OPs,typename... VALs>
  A& operator=(const std::pair< std::tuple<VALs...> , std::tuple<OPs...> >& e) {
    for( int i = 0 ; i < vec.size() ; ++i ) {
      vec[i] = eval( extract(i,e.first) , e.second );
    }
  }
};

Ответы на вопрос(3)

Ваш ответ на вопрос