#include <algorithm>
#include <functional>
#include <iostream>
#include <memory>
#include <string>
#include <type_traits>
#include <utility>


template<typename T>
class SomeClass {
public:
    template <class U = T>
    std::enable_if_t<std::is_fundamental<U>::value, T>
        DoSomething() {
    	std::cout << "Fundamental\n";
        return T();
    }

    template <class U = T>
    std::enable_if_t<!std::is_fundamental<U>::value, T>
        DoSomething() {
    	std::cout << "NON-Fundamental\n";
        return T();
    }
};

int main()
{
	SomeClass<int> f;
	f.DoSomething();
	SomeClass<SomeClass<int>> n;
	n.DoSomething();
}