
On Wed, May 13, 2009 at 12:38 PM, Simonson, Lucanus J <lucanus.j.simonson@intel.com> wrote:
Thorsten Ottosen wrote:
joaquin@tid.es skrev:
Beman Dawes escribió:
Attached is proof-of-concept code for a sentinel iterator adapter. It turns a pointer to sentinel terminated sequence, such as a C-style string, into a forward iterator with a conforming end iterator.
Having Sentinel specified as a non-type template parameter greatly reduces the category of types this can work with. I'd replace it with some SentinelFactory policy or something.
That is not a bad idea, although it would really be good if the basic case can stay as optimaized as currently (having a static member). I guess having a static member is not an option for a general policy, thus giving us the usual iterator problem of double storage.
I don't understand the rationale for m_sentinel. Couldn't the code refer to Sentinel directly as a compile time constant as opposed to a static member variable?
The concern is that Sentinel() isn't a compile time constant. It is a potentially expensive call to a constructor. An optimizer may be smart enough to resolve Sentinel() at compile time, and generate maximally efficient code accordingly, but there is no guarantee of that. --Beman