From: "judoka1981"
Hi,
I'm trying to find the first non-space character of a string using
boost::bind, but I simply can't get this to compile:
---
static void Trim(std::string& stringToTrim)
{
std::string::iterator firstNonSpace =
std::find_if(stringToTrim.begin(),
stringToTrim.end(),
boost::bind(std::not_equal_to<int>(),
boost::bind(&isspace, _1),
0));
This may or may not compile, depending on whether <locale> is included (it
contains a two-argument std::isspace), and depending on which isspace's are
in the global namespace ( vs <cctype>).
One possible fix is to use
int (*isspace)(int) = &std::isspace; // use the <cctype> isspace
but using isspace(ch) in this way isn't portable as char may be signed, the
portable use is isspace(static_cast<unsigned char>(ch)).
The other approach is
bool (*isspace)(char, std::locale const &) = &std::isspace; // use the
<locale> isspace
and change the inner bind to boost::bind(isspace, _1, l) where l is the
locale to use.
Also, you may consider using std::logical_not<bool> in the outer bind; on
MSVC.NET, due to lack of function template partial ordering, you'll need to
tell bind the return type, too: bind<bool>.