use boost::has_equal_to rather than own sfinae