Regarding the first object
MyClass obj (30);
This is a direct initialization, thus the constructor should be called if the argument has a correct type of the parameter. In this case the parameter is incorrect so just to be more accurate in this case i would change the size_t to unsigned int and then pass 30u to this object. In this case the first constructor would be called.
Regrding the second object
MyClass obj = 30;
This is an initialization by copy, thus i would change the second constructor to a copy constructor like this:
template<class T> MyClass(const T& myObj);
In my opinion in this case its even better to change your data members to ints. Nevertheless the first constructor should be called and then the second as wanted.
MyClass obj( 30u );
? – Hypostasis