Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <type_traits>
- namespace Internal
- {
- template <template<typename...> class TT, typename T>
- struct IsInstantiation : std::false_type {};
- template <template<typename...> class TT, typename... Ts>
- struct IsInstantiation<TT, TT<Ts...>> : std::true_type {};
- template <typename T1, typename = void>
- struct MyClass
- {
- void func(int i);
- };
- template <typename T1>
- struct MyClass<T1, std::enable_if_t<IsInstantiation<MyClass, T1>::value>>
- {
- void func(int i);
- };
- }
- template <typename T1, typename T2>
- inline void Internal::MyClass<T1, T2>::func(int i) {}
- template <typename T1>
- inline void Internal::MyClass<T1, std::enable_if_t<Internal::IsInstantiation<Internal::MyClass, T1>::value>>::func(int i) {}
- int main(int argc, char *argv[])
- {
- Internal::MyClass<int> mc1;
- Internal::MyClass<Internal::MyClass<int>> mc2;
- mc1.func(0);
- mc2.func(0);
- }
Add Comment
Please, Sign In to add comment