#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();
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8dXRpbGl0eT4KCgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpjbGFzcyBTb21lQ2xhc3MgewpwdWJsaWM6CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgVSA9IFQ+CiAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZnVuZGFtZW50YWw8VT46OnZhbHVlLCBUPgogICAgICAgIERvU29tZXRoaW5nKCkgewogICAgCXN0ZDo6Y291dCA8PCAiRnVuZGFtZW50YWxcbiI7CiAgICAgICAgcmV0dXJuIFQoKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgVSA9IFQ+CiAgICBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Z1bmRhbWVudGFsPFU+Ojp2YWx1ZSwgVD4KICAgICAgICBEb1NvbWV0aGluZygpIHsKICAgIAlzdGQ6OmNvdXQgPDwgIk5PTi1GdW5kYW1lbnRhbFxuIjsKICAgICAgICByZXR1cm4gVCgpOwogICAgfQp9OwoKaW50IG1haW4oKQp7CglTb21lQ2xhc3M8aW50PiBmOwoJZi5Eb1NvbWV0aGluZygpOwoJU29tZUNsYXNzPFNvbWVDbGFzczxpbnQ+PiBuOwoJbi5Eb1NvbWV0aGluZygpOwp9