Opened 10 years ago
Last modified 10 years ago
#6965 new Feature Requests
Handling of sequence of non const reference
Reported by: | Joel Falcou | Owned by: | Joel de Guzman |
---|---|---|---|
Milestone: | To Be Determined | Component: | fusion |
Version: | Boost Development Trunk | Severity: | Problem |
Keywords: | Cc: |
Description
Currently, assigning or copying a fusion sequence of non const reference to another is not possible. Down into the code, the vectorN classes only has a vectorN( const Sequence& ) constructor that calls a const qualified from_sequence method from the base_type.
Sequence of reference has a nice use case of enabling strcuture of arrayArray of structure efficient application and this can't be doen with current Fusion.
Could all sequence be amended so passing a non const sequence as initialisation is dealt with correctly ?
Attachments (2)
Change History (5)
comment:1 by , 10 years ago
by , 10 years ago
Attachment: | ref_vector.cpp added |
---|
Test case for composite_reference, a class acting as a reference tuple onto an struct adapted as a fusion sequence
comment:2 by , 10 years ago
I Just attached a test case and the error I get. Adding:
template <typename Sequence> static BOOST_PP_CAT(vector_data, N) init_from_sequence(Sequence& seq) { typedef typename result_of::begin<Sequence>::type I0; I0 i0 = fusion::begin(seq); BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_ITER_DECL_VAR, _) return BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_PARAMS(N, *i)); } template <typename Sequence> BOOST_PP_CAT(vector, N)( Sequence& seq #if (N == 1) , typename boost::disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0 #endif ) : base_type(base_type::init_from_sequence(seq)) {}
to vector_n.hpp and re-preprocess fix the stuff. I guess other sequences may have similar mechanism. Not sure about any side effect tough.
comment:3 by , 10 years ago
Fixed for vector. I'll leave this open as a reminder to fix other containers.
If you can provide a test case for a specific use case, I can look into this and implement a fusion wide mod. Thanks, Joel!