#include <iostream>
#include <utility>

template<class>
struct empty_type {};

template<class Head, class... Tail>
struct inheritance_chain : empty_type<Head>, inheritance_chain<Tail...> {};

template<class Head>
struct inheritance_chain<Head> : empty_type<Head> {};

template<class... T>
struct unreliable_has_duplicate :
std::integral_constant<bool, sizeof(inheritance_chain<T...>) != 1> {};

int main(int, char*[]) {
  std::cout << std::boolalpha;
  std::cout << unreliable_has_duplicate<float, float, int>::value << '\n';
  std::cout << unreliable_has_duplicate<float, char, int>::value << '\n';
  std::cout << unreliable_has_duplicate<int, int*, int**, int***, int*>::value << '\n';
  return 0;
}