Implement the ability to swap fields
Something like:
template< typename T >
void swap_fields( T& t1, T& t2 );
which would then swap the underlying storage such that:
Field f1, f2, f3;
f1 <<= 1.0;
f2 <<= 2.0;
f3 <<= f2;
assert( field_equal( f2, f3 ) );
swap_fields( f1, f2 );
assert( field_equal( f1, f3 ) );
assert( !field_equal( f2, f3 ) );