Два выпуска.
То, что вы ищете (element<T>::value
) - это , а не имя типа.
Однако, во-первых, вам понадобятся вложенные привязки: одна для доступа к _1.first
и другая для доступа к value
предыдущего.
Без определения типа:
std::find_if(
container.begin(), container.end(),
bind(
&element<T>::value,
bind(&std::pair<element<T>, std::vector<T> >::first, boost::lambda::_1)
) == value
);
И так, с вашей идиомой, без ненужного typename :
std::find_if( container.begin(), container.end(),
bind(
&vector_containter<T>::type::value_type::first_type::value,
bind(
&vector_containter<T>::type::value_type::first, boost::lambda::_1)
) == value
);
Хотя это не выглядит особенно читабельным. Возможно, а) ждать C ++ 0x лямбда, б) написать специальный функтор для вызова find_if
, в) просто выполнить ручной цикл.