You can pass FIX::Message as a parameter but you will not be able to use the generated typesafe field accessors. That's not necessarily a bad thing if you need flexibility more than type safety but it means you must be more careful in how you access and interpret the message data.
The FIX::Message constructor that takes another FIX::Message copies the source message's internal FieldMap from one message to another. This will probably work reasonably well for two NewOrderSingles from different FIX versions but be careful about fields that have had their type modified between versions or don't exist in one version or the other. You can actually construct any generated message using a constructor that takes any other subtype of FIX::Message. However, if the messages are unrelated this probably isn't useful since the fields if the source messages may not be valid for the target message although it won't cause a compile-time or run-time error.