Consider:
std::tuple<int , const A&> func (const A& a)
{
return std::make_tuple( 0 , std::ref(a) );
}
Is the std::ref
required for writing correct and portable code? (It compiles fine without it)
Background:
If I remove std::ref
my code builds fine without any warnings (g++-4.6 -Wall
), but doesn't run correctly.
In case of interest the definition of 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 );
}
}
};
make_tuple(0, a)
makes a tuple<int, A>
.make_tuple(0, ref(a))
makes a tuple<int, reference_wrapper<A>>
.tuple<int, A&> t(0, a);
for a tuple you can't make with make_tuple
, or use std::tie
.