Рассмотрим:
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 );
}
}
};