template <typename T>
class myTemplateClass
{
public:
    myTemplateClass()
    {
        // do something
    }
    myTemplateClass(T t)
        : val{t}
    {
        // do something
    }
    T val;
};
class mySimpleClass
{
public:
    mySimpleClass()
    {
        // do something
    }
};
template <template<typename> class TT, typename T = void>
auto create()
{
    if constexpr (std::is_same_v<TT<T>, myTemplateClass<T>>)
    {
        // do something
        // and return
        return myTemplateClass<T>();
    }
    else
    {
        //constexpr (std::is_same_v<TT, mySimpleClass>)
        // do something
        // and return
        return  mySimpleClass{};
    }
};
int main()
{
    {
        auto result = create<myTemplateClass<int>>();
    }
    {
        auto result = create<mySimpleClass>();
    }
    return 0;
}
I tried to implement one create() function which return one of a template class and a normal class based on template parameter, but it has an error.
How can I implement create() to support this situation?
mostly, it is used as like
create<int>();
create<double>();
but if I want to mix as like create<myTemplateClass>() and create in one create function based one template function, is there any way?
 
     
    