
"Jonathan Turkanis" <technews@kangaroologic.com> wrote in message news:d088s0$294$1@sea.gmane.org... | Thorsten Ottosen wrote: | > "Arkadiy Vertleyb" <vertleyb@hotmail.com> wrote in message | | >> I am not really that familiar with this library, but I assume it has | >> to do with containers, correct? Assume the following usage | >> (pseudocode) | >> | >> Range(std::vector<MyNamespace::SomeTemplate<boost::multi-index<boost::mpl::v | >> ector> > > ) | >> | >> Now ADL will use std, boost, MyNamespace, boost::multi_index, and | >> boost::mpl to find Range. There is absolutely no guarantee that it | >> won't find conflicting functions :-( | > | > I don't get this. Surely one of the functions would be a better match | > than the others and hence called. | | I think Arkadiy might mean that the wrong function could be selected; however, | the class author should be able to figure this out. I don't get that either :-) | Would it be possible to indroduce an extra level of indirection so that Range | can be used with a type even if there are preexisting begin/end/.. functions | that do the wrong thing? For instance, | | template<typename T> | struct begin_impl { | typename range_iterator<T>::type | begin( T& c ) { return adl_begin(c); } | | typename range_const_iterator<T>::type | begin( const T& c ) { return adl_begin(c); } | }; | | template< class T > | typename range_iterator<T>::type | begin( T& c ) | { | return begin_impl<T>::begin(c); | } | | template< class T > | typename range_const_iterator<T>::type | begin( const T& c ) | { | return begin_impl<T>::begin(c); | } | | Then as a last resort someone could specialize begin_impl. I was thinking of something like that too. May I ask why you want the functions inside a class (partial specialization doesn't seem to be needed very frequently, does it)? I would rather a protocol like this was made: template< class T > typename range_iterator<T>::type begin( T& r ) { return adl_begin(r); } | Or is something like | this already possible? no. -Thorsten