$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Jordan DeLong (jordan.delong_at_[hidden])
Date: 2006-12-15 13:15:55
The other day I wrote a line that looked something like:
foo.erase(
  std::remove_if(foo.begin(), foo.end(),
    some_condition ? !boost::is_any_of("blah")
                   : boost::is_any_of("blah")),
  foo.end());
This compiled fine, but behaved unexpectedly at runtime.  It seems that
the compiler decides to instantiate the remove_if template with the
predicate type as the negator class, which has an implicit constructor.
So even when some_condition is false, it still ended up negating the
predicate.
The class involved is algorithm::detail::pred_notF<>.  Is there any reason
for the constructor to be implicit?  (Some of the other constructors in
classification.hpp are also implicit.)
Thanks,
-- Jordan DeLong jordan.delong_at_[hidden]