Advertisement
Guest User

type system abuse

a guest
Jul 19th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.97 KB | None | 0 0
  1. #include <iostream>
  2. #include <typeinfo>
  3.  
  4.  
  5. class type_compare {
  6. private:
  7.     bool _are_same = true;
  8.  
  9.  
  10.     template<typename T, typename U>
  11.     T _are_same_types(T first, U second) {
  12.         if (!_are_same) {
  13.             return first;
  14.         }
  15.  
  16.  
  17.         if (typeid(first) != typeid(second)) {
  18.             _are_same = false;
  19.             return first;
  20.         }
  21.  
  22.         return first;
  23.     }
  24.  
  25.     template<typename T, typename... Types>
  26.     T _are_same_types(T value, Types... args) {
  27.         if (!_are_same) {
  28.             return value;
  29.         }
  30.  
  31.  
  32.         auto t = _are_same_types(args...);
  33.  
  34.         if (typeid(value) != typeid(t)) {
  35.             _are_same = false;
  36.             return value;
  37.         }
  38.  
  39.         return value;
  40.     }
  41.  
  42. public:
  43.     template<typename... Types>
  44.     type_compare(Types... args) {
  45.         _are_same_types(args...);
  46.     }
  47.  
  48.     bool are_all_same() {
  49.         return _are_same;
  50.     }
  51. };
  52.  
  53.  
  54. int main(int argc, char* argv[]) {
  55.     type_compare a(1, 2, 3, 4);
  56.     type_compare b(1, "s", 3, 4);
  57.  
  58.     std::cout << a.are_all_same() << std::endl;
  59.     std::cout << b.are_all_same() << std::endl;
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement