#include <iostream>
#include <type_traits>
#include <vector>

using namespace std;

template<typename T, typename = decltype(std::declval<T>() < std::declval<T>() )> 
std::true_type  supports_less_than_test(const T&);
std::false_type supports_less_than_test(...);

template<typename T>
struct has_less_than_operator : std::integral_constant<bool, std::is_same<std::true_type, 
                                                             decltype(supports_less_than_test(std::declval<T>()))>::value> {};

struct foo
{
	
};

int main() {
	std::vector<foo> obj;
	std::cout << has_less_than_operator<decltype(obj)>::value << std::endl; // should return 0
	//std::cout << (obj < obj) << std::endl; // compile error
	return 0;
}