#include <iostream>
#define P(x) std::cout<<x<<std::endl

struct A {};
struct B {};

struct Yoba
{
   template<typename ReturnT, typename ParamT> 
   ReturnT create(ParamT);
};

template<> inline
A Yoba::create<A, ParamT>(ParamT x)
{
   return A();
}  

template<> inline
B Yoba::create<B, ParamT>(ParamT x)
{
   return B();
}  


int main()
{
   Yoba y;
   y.create<A>(1);
   y.create<B>('a');
}