public static TDestination Transfer <TSource, TDestination>(ref TSource source)
            where TSource : struct, IPropertyContainer
            where TDestination : struct, IStructPropertyContainer <TDestination>
        {
            var visitor = new TransferVisitor(new TDestination());

            Visit(ref source, visitor);
            return((TDestination)visitor.Pop());
        }