
#include <type_traits>
#include <string>
#include <sstream>
#include <map>
#include <functional>
#include <stdexcept>
#include <memory>
#include <set>
#include <algorithm>
#include <fstream>
#include <algorithm>
#include <iostream>
#include <array>
#include <iterator>
#include <clocale>
#include <iostream>
#include <ostream>


template <typename T, typename V>
decltype(new T(*((V*)0))) create_(V param, int) { 
    std::cout << "T(1)\n";
    return new T(param); 
}

template <typename T, typename V>
T * create_(V...) { 
    std::cout << "T\n";
    return new T(); 
}

template <typename T, typename V>
T* create(V param)
{
    return create_<T>(param, 7);
}

struct S{
    S(char c){
        std::cout << "char: " << c <<"\n";
    }
    S(){}
};

struct G
{

};  

int main()
{
    create<S>('d');
    create<G>('b');
}