template<typename ForwardIterator, typename StringType>
inline bool starts_with(ForwardIterator begin, ForwardIterator end, const StringType& target)
{
assert(begin < end);
if (std::distance(std::begin(target), std::end(target)) > std::distance(begin, end))
{
return false;
}
return std::equal(std::begin(target), std::end(target), begin);
}
This fails because std::end
returns one past the '\0'
if StringType
is a string literal, not the '\0'
. (In this respect, it's similar to the range based for loop inconsistency ) How does one work around this?