Guest User

Untitled

a guest
Apr 20th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.91 KB | None | 0 0
  1. #include <type_traits>
  2.  
  3. namespace Internal
  4. {
  5. template <template<typename...> class TT, typename T>
  6. struct IsInstantiation : std::false_type {};
  7.  
  8. template <template<typename...> class TT, typename... Ts>
  9. struct IsInstantiation<TT, TT<Ts...>> : std::true_type {};
  10.  
  11. template <typename T1, typename = void>
  12. struct MyClass
  13. {
  14. void func(int i);
  15. };
  16.  
  17. template <typename T1>
  18. struct MyClass<T1, std::enable_if_t<IsInstantiation<MyClass, T1>::value>>
  19. {
  20. void func(int i);
  21. };
  22. }
  23.  
  24. template <typename T1, typename T2>
  25. inline void Internal::MyClass<T1, T2>::func(int i) {}
  26.  
  27. template <typename T1>
  28. inline void Internal::MyClass<T1, std::enable_if_t<Internal::IsInstantiation<Internal::MyClass, T1>::value>>::func(int i) {}
  29.  
  30. int main(int argc, char *argv[])
  31. {
  32. Internal::MyClass<int> mc1;
  33. Internal::MyClass<Internal::MyClass<int>> mc2;
  34.  
  35. mc1.func(0);
  36. mc2.func(0);
  37. }
Add Comment
Please, Sign In to add comment