
On Dec 11, 2005, at 10:49 AM, Arkadiy Vertleyb wrote:
Then is it possible to take a look inside, and see what is so specific about binder "extension" that causes the problem with this particular templates?
Peter hit the nail on the head (as usual).
Unless the compiler has a bug, the only explanation is nonstandard default arguments.
template <class Operation, class T = typename Metrowerks::remove_reference<Operation>::type::first_argument_type> class binder1st ... It is wrapped in: #ifdef _MSL_EXTENDED_BINDERS with the standard version in the #else. _MSL_EXTENDED_BINDERS is defined by default in <mslconfig> which every CodeWarrior std C++ header includes. The intent was to create a binder1st that could hold the operation by reference if desired in order to avoid copies of expense-to-copy predicates (such as those holding a container to compare to). tr1::ref is probably a better solution to that problem, as is tr1::bind. Consider this a failed experiment on my part. -Howard