Когда необходимо использовать стандартную ссылку ::?

Рассмотрим:

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 );
    }
  }
};
24
задан ritter 6 August 2012 в 17:30
поделиться