
I'm trying to define a custom sequence for use by the replace_all() function of boost::string::algo. I'm hitting an error that I am not able to decipher the cause of. In the Finder concept check in find_format.hpp (Line 238), I'm getting two errors: Error : illegal template argument(s) (point of instantiation: 'SpecifyItem(const unsigned char *, const unsigned char *, bool)') (instantiating: 'boost::algorithm::replace_all<sequence, const unsigned char *, const unsigned char *>(sequence &, const unsigned char *const &, const unsigned char *const &)') (instantiating: 'boost::algorithm::find_format_all<sequence, boost::algorithm::detail::first_finderF<const unsigned char *, boost::algorithm::is_equal>, boost::a lgorithm::detail::const_formatF<const unsigned char *>>(sequence &, boost::algorithm::detail::first_finderF<const unsigned char *, boost::algorithm::is_equal>, boost::a lgorithm::detail::const_formatF<const unsigned char *>)') find_format.hpp line 238 BOOST_STRING_TYPENAME const_iterator_of<SequenceT>::type> >(); Error : '(' expected (point of instantiation: 'SpecifyItem(const unsigned char *, const unsigned char *, bool)') (instantiating: 'boost::algorithm::replace_all<sequence, const unsigned char *, const unsigned char *>(sequence &, const unsigned char *const &, const unsigned char *const &)') (instantiating: 'boost::algorithm::find_format_all<sequence, boost::algorithm::detail::first_finderF<const unsigned char *, boost::algorithm::is_equal>, boost::a lgorithm::detail::const_formatF<const unsigned char *>>(sequence &, boost::algorithm::detail::first_finderF<const unsigned char *, boost::algorithm::is_equal>, boost::a lgorithm::detail::const_formatF<const unsigned char *>)') find_format.hpp line 238 BOOST_STRING_TYPENAME const_iterator_of<SequenceT>::type> >(); The sequence I am defining wraps a Macintosh style Pascal string. (For those not in the know, these are a string where the first byte is the length. The character type is also unsigned char.) I am defining the sequence called sequence: class sequence { public: sequence() {} sequence( unsigned char* in_sequence ) : sequence( in_sequence ) {} typedef unsigned char value_type; typedef std::ptrdiff_t difference_type; typedef std::size_t size_type; typedef unsigned char* iterator; typedef const unsigned char* const_iterator; iterator begin() { return &sequence[1]; } const_iterator begin() const { return &sequence[1]; } iterator end() { return &sequence[ sequence[0] ]; } const_iterator end() const { return &sequence[ sequence[0] ]; } private: unsigned char* sequence; }; This isn't complete, but I thought I could get a little farther than this or at least understand what I am missing from the definition that this concept check doesn't fail. I am using it like this: void SpecifyItem( unsigned string* in_pascal_string ) { sequence seq( in_pascal_string ); const unsigned char* find_this = "\pa"; const unsigned char* replace_with = "\pb"; boost::algorithm::replace_all( seq, find_this, replace_with ); } I also don't have a copy of the spec to understand all of the requirements for a sequence, so I was shooting in the dark emulating a vector to see how for I could get. I expected to get a little farther. :-) Thanks for any tips, ...Duane