fork download
  1. #include <iostream>
  2. #include <utility>
  3.  
  4. template<class>
  5. struct empty_type {};
  6.  
  7. template<class Head, class... Tail>
  8. struct inheritance_chain : empty_type<Head>, inheritance_chain<Tail...> {};
  9.  
  10. template<class Head>
  11. struct inheritance_chain<Head> : empty_type<Head> {};
  12.  
  13. template<class... T>
  14. struct unreliable_has_duplicate :
  15. std::integral_constant<bool, sizeof(inheritance_chain<T...>) != 1> {};
  16.  
  17. int main(int, char*[]) {
  18. std::cout << std::boolalpha;
  19. std::cout << unreliable_has_duplicate<float, float, int>::value << '\n';
  20. std::cout << unreliable_has_duplicate<float, char, int>::value << '\n';
  21. std::cout << unreliable_has_duplicate<int, int*, int**, int***, int*>::value << '\n';
  22. return 0;
  23. }
Success #stdin #stdout 0s 3412KB
stdin
Standard input is empty
stdout
true
false
true