#include #include #include // (1) Forward declaration with concepts. template BOOST_CONCEPT_REQUIRES( ((boost::ForwardIterator)) ((boost::EqualityComparable)) , (bool) ) all_equals(Iter first, Iter last, const T& val); // (2) Actual definition. template BOOST_CONCEPT_REQUIRES( ((boost::ForwardIterator)) ((boost::EqualityComparable)) , (bool) ) all_equals(Iter first, Iter last, const T& val) { for (Iter i = first; i < last; ++i) { if (*i != val) return false; } return true; } int main() { std::vector v; // MSVC error: Cannot resolved ambiguous call between (1) and (2). all_equals(v.begin(), v.end(), double()); return 0; }