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!