Detect operator support with decltype/SFINAE
In C++11 the shortest most general solution I found was this one: #include <type_traits> template<class T, class = decltype(std::declval<T>() < std::declval<T>() )> std::true_type supports_less_than_test(const T&); std::false_type supports_less_than_test(…); template<class T> using supports_less_than = decltype(supports_less_than_test(std::declval<T>())); #include<iostream> struct random_type{}; int main(){ std::cout << supports_less_than<double>::value << std::endl; // prints ‘1’ std::cout << supports_less_than<int>::value << std::endl; // prints ‘1’ std::cout … Read more