Not certain polymorphism works unless it is a pointer/reference you send inparameter, it might be the case that the base-class part of your derived class is just cut and pasted into the argument , "slicing"
Watch out when the constructor parameter is some kind of reference, the compiler usually complains if one tries to create the object in place (i think it is just an rvalue then unless the parameter it is trying to bind to is const&) (personally I don't understand why, but I guess the c++ creators didn't think one would like to create something that is destroyed right after the fuction call is complete)