Subject: Re: [Boost-bugs] [Boost C++ Libraries] #4400: BOOST_PP_SEQ_REPLACE fails in corner cases
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2015-05-24 17:49:41
#4400: BOOST_PP_SEQ_REPLACE fails in corner cases
--------------------------------------+---------------------------
Reporter: Wolf Lammen <ookami1@â¦> | Owner: no-maintainer
Type: Bugs | Status: new
Milestone: Boost 1.44.0 | Component: preprocessor
Version: Boost 1.44.0 | Severity: Problem
Resolution: | Keywords:
--------------------------------------+---------------------------
Comment (by ookami1@â¦):
After having looked at your solution, here are my comments:
Lets look at BOOST_PP_SEQ_REPLACE((a),0,b)
I can tell from the list of replacements that you somewhere in the middle
call
BOOST_PP_SEQ_FIRST_N(0,(a))
expecting it to return an empty replacement.
Ok, we know both, BOOST_PP_SEQ_FIRST_N does the right thing by pure chance
and returns an empty sequence. But given your formalistic stance,
shouldn't usage of index 0 with BOOST_PP_SEQ_FIRST_N be banned as much as
BOOST_PP_SEQ_REST_N is with an index == size of sequence? Don't you rely
on undefined behavior as well?
And your solution comes with a price: The number of replacements increases
from 28 to 38 in the above simple case, goes up from 57 to 117 in a
24-element sequence, such getting worse by the size. Another minor fault
is the different spacing in the part before a replacement and after it:
"(a) (a) (a) (b) (a)(a)(a)". This is less of a problem as long as you do
just macro magic, but becomes essentiell once you stringize a sequence as
I did.
See, you and Mr Mensonides had difficulties in getting these things right,
let alone an averaged programmer like me. If you ask me, I still prefer a
change in interface and let BOOST_PP_SEQ_FIRST_N and BOOST_PP_SEQ_REST_N
either return a sequence, if exists, or an empty string, in the range
0..size of seq. This is the right result in all instances where you
concatenate sequences, and it does not hurt elsewhere.
cheers Wolf
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/4400#comment:9> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:18 UTC