c++ - Concatenating const_string's -


how concatenate 2 const_string's? home http://conststring.sourceforge.net/ says citation:

it uses expression templates concatenation, eliminating overhead resulting creation intermediate temporary objects.

so thought simplest form

typedef class boost::const_string<char> csc; csc a, b; csc c = a+b; 

should work. gcc-4.6 complains operator+. why? have cast a , b std::string?

error output follows:

semnet/realfile.cpp:185:13: error: no match ‘operator+’ in ‘a + b’ semnet/realfile.cpp:185:13: note: candidates are: /usr/include/c++/4.6/bits/stl_bvector.h:352:3: note: std::_bit_const_iterator std::operator+(std::ptrdiff_t, const std::_bit_const_iterator&) /usr/include/c++/4.6/bits/stl_bvector.h:352:3: note:   no known conversion argument 1 ‘csc’ ‘std::ptrdiff_t’ /usr/include/c++/4.6/bits/stl_bvector.h:266:3: note: std::_bit_iterator std::operator+(std::ptrdiff_t, const std::_bit_iterator&) /usr/include/c++/4.6/bits/stl_bvector.h:266:3: note:   no known conversion argument 1 ‘csc’ ‘std::ptrdiff_t’ /usr/include/c++/4.6/bits/basic_string.h:2414:20: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(std::basic_string<_chart, _traits, _alloc>&&, _chart) /usr/include/c++/4.6/bits/basic_string.h:2408:27: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(std::basic_string<_chart, _traits, _alloc>&&, const _chart*) /usr/include/c++/4.6/bits/basic_string.h:2402:53: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(_chart, std::basic_string<_chart, _traits, _alloc>&&) /usr/include/c++/4.6/bits/basic_string.h:2396:53: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(const _chart*, std::basic_string<_chart, _traits, _alloc>&&) /usr/include/c++/4.6/bits/basic_string.h:2384:53: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(std::basic_string<_chart, _traits, _alloc>&&, std::basic_string<_chart, _traits, _alloc>&&) /usr/include/c++/4.6/bits/basic_string.h:2378:53: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(const std::basic_string<_chart, _traits, _alloc>&, std::basic_string<_chart, _traits, _alloc>&&) /usr/include/c++/4.6/bits/basic_string.h:2372:58: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(std::basic_string<_chart, _traits, _alloc>&&, const std::basic_string<_chart, _traits, _alloc>&) /usr/include/c++/4.6/bits/basic_string.h:2359:79: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(const std::basic_string<_chart, _traits, _alloc>&, _chart) /usr/include/c++/4.6/bits/basic_string.h:2344:26: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(const std::basic_string<_chart, _traits, _alloc>&, const _chart*) /usr/include/c++/4.6/bits/basic_string.tcc:710:79: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(_chart, const std::basic_string<_chart, _traits, _alloc>&) /usr/include/c++/4.6/bits/basic_string.tcc:695:58: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(const _chart*, const std::basic_string<_chart, _traits, _alloc>&) /usr/include/c++/4.6/bits/basic_string.h:2307:58: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(const std::basic_string<_chart, _traits, _alloc>&, const std::basic_string<_chart, _traits, _alloc>&) /usr/include/c++/4.6/bits/stl_iterator.h:1113:43: note: template<class _iterator> std::move_iterator<_iterator> std::operator+(typename std::move_iterator<_iterator>::difference_type, const std::move_iterator<_iterator>&) /usr/include/c++/4.6/bits/stl_iterator.h:328:46: note: template<class _iterator> std::reverse_iterator<_iterator> std::operator+(typename std::reverse_iterator<_iterator>::difference_type, const std::reverse_iterator<_iterator>&) /usr/include/c++/4.6/bits/stl_iterator.h:897:64: note: template<class _iterator, class _container> __gnu_cxx::__normal_iterator<_iterator, _container> __gnu_cxx::operator+(typename __gnu_cxx::__normal_iterator<_iterator, _container>::difference_type, const __gnu_cxx::__normal_iterator<_iterator, _container>&) semnet/realfile.cpp:186:63: error: no match ‘operator+’ in ‘xns + boost::const_string<char>(boost::cref [with t = const char*]((* & chashid_get_name_static(hid))), 4294967295u)’ semnet/realfile.cpp:186:63: note: candidates are: /usr/include/c++/4.6/bits/stl_bvector.h:352:3: note: std::_bit_const_iterator std::operator+(std::ptrdiff_t, const std::_bit_const_iterator&) /usr/include/c++/4.6/bits/stl_bvector.h:352:3: note:   no known conversion argument 1 ‘const csc’ ‘std::ptrdiff_t’ /usr/include/c++/4.6/bits/stl_bvector.h:266:3: note: std::_bit_iterator std::operator+(std::ptrdiff_t, const std::_bit_iterator&) /usr/include/c++/4.6/bits/stl_bvector.h:266:3: note:   no known conversion argument 1 ‘const csc’ ‘std::ptrdiff_t’ /usr/include/c++/4.6/bits/basic_string.h:2414:20: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(std::basic_string<_chart, _traits, _alloc>&&, _chart) /usr/include/c++/4.6/bits/basic_string.h:2408:27: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(std::basic_string<_chart, _traits, _alloc>&&, const _chart*) /usr/include/c++/4.6/bits/basic_string.h:2402:53: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(_chart, std::basic_string<_chart, _traits, _alloc>&&) /usr/include/c++/4.6/bits/basic_string.h:2396:53: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(const _chart*, std::basic_string<_chart, _traits, _alloc>&&) /usr/include/c++/4.6/bits/basic_string.h:2384:53: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(std::basic_string<_chart, _traits, _alloc>&&, std::basic_string<_chart, _traits, _alloc>&&) /usr/include/c++/4.6/bits/basic_string.h:2378:53: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(const std::basic_string<_chart, _traits, _alloc>&, std::basic_string<_chart, _traits, _alloc>&&) /usr/include/c++/4.6/bits/basic_string.h:2372:58: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(std::basic_string<_chart, _traits, _alloc>&&, const std::basic_string<_chart, _traits, _alloc>&) /usr/include/c++/4.6/bits/basic_string.h:2359:79: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(const std::basic_string<_chart, _traits, _alloc>&, _chart) /usr/include/c++/4.6/bits/basic_string.h:2344:26: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(const std::basic_string<_chart, _traits, _alloc>&, const _chart*) /usr/include/c++/4.6/bits/basic_string.tcc:710:79: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(_chart, const std::basic_string<_chart, _traits, _alloc>&) /usr/include/c++/4.6/bits/basic_string.tcc:695:58: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(const _chart*, const std::basic_string<_chart, _traits, _alloc>&) /usr/include/c++/4.6/bits/basic_string.h:2307:58: note: template<class _chart, class _traits, class _alloc> std::basic_string<_chart, _traits, _alloc> std::operator+(const std::basic_string<_chart, _traits, _alloc>&, const std::basic_string<_chart, _traits, _alloc>&) /usr/include/c++/4.6/bits/stl_iterator.h:1113:43: note: template<class _iterator> std::move_iterator<_iterator> std::operator+(typename std::move_iterator<_iterator>::difference_type, const std::move_iterator<_iterator>&) /usr/include/c++/4.6/bits/stl_iterator.h:328:46: note: template<class _iterator> std::reverse_iterator<_iterator> std::operator+(typename std::reverse_iterator<_iterator>::difference_type, const std::reverse_iterator<_iterator>&) /usr/include/c++/4.6/bits/stl_iterator.h:897:64: note: template<class _iterator, class _container> __gnu_cxx::__normal_iterator<_iterator, _container> __gnu_cxx::operator+(typename __gnu_cxx::__normal_iterator<_iterator, _container>::difference_type, const __gnu_cxx::__normal_iterator<_iterator, _container>&) semnet/realfile.cpp:187:1: warning: control reaches end of non-void function [-wreturn-type] make: *** [semnet/realfile.o] fel 1  compilation exited abnormally code 2 @ fri apr 29 15:42:00 

did include relevant header, boost/const_string/concatenation.hpp?


Comments