Re: Conversion operator that must convert return...
On Aug 30, 3:24 pm, Gil <vnic...@gmail.com> wrote:
On Aug 30, 1:13 pm, Noah Roberts <roberts.n...@gmail.com> wrote:
I am trying to do something like so:
std::tie(x,y) = object;
My initial attempt was something like so:
struct attempt0
{
template < typename ... T >
operator std::tuple<T...> ()
{
return std::tuple<T...>();
}
};
The problem here is that tie returns a tuple of reference types, I
can't just construct and return an empty one. It is assignable from
tuples that have matching non-reference types though so my next naive
attempt was:
struct attempt1
{
template < typename ... T >
operator std::tuple<typename std::remove_reference<T>::type...>()
{
return std::tuple<typename std::remove_reference<T>::type...>()=
;
}
};
This version is of course not recognized though. Third attempt was:
struct attempt2
{
template < typename ... T >
operator std::tuple<T...>()
{
return std::tuple<typename std::remove_reference<T>::type...>()=
;
}
};
I didn't expect this to work and it of course didn't.
Sitting here trying to come up with legal C++ to do what I'm trying
and I can't think of any. Any ideas?
you have to *add* reference to match the tie decl type... see below.
/**
* @file: tie_test.cpp
* @author: gil
* Distributed under the Boost Software License, Version 1.0.
*/
#include <tuple>
#include <iostream>
#include <functional>
template< typename X, typename Y >
struct object {
object( X const & x, Y const & y ) : x( x ), y( y ) { }
operator std::tuple< X&, Y& >() {
return std::make_tuple( std::ref( x ), std::ref( y ) );
What if x & y are calculated?
}
X x; Y y;
};
int main( ) {
object< int, int > c0( 0, 1 );
int i, d;
std::tie( i, d ) = c0; /* problem solved */
std::cout << i << " " << d << std::endl;
}