make WithTransform() propagate MatchMayChangeInTheFuture() from wrapped matcher
diff --git a/matchers/with_transform.go b/matchers/with_transform.go
index 430223e..a8d2a7c 100644
--- a/matchers/with_transform.go
+++ b/matchers/with_transform.go
@@ -2,6 +2,7 @@
 
 import (
 	"fmt"
+	"github.com/onsi/gomega/internal/asyncassertion"
 	"github.com/onsi/gomega/types"
 	"reflect"
 )
@@ -59,3 +60,7 @@
 func (m *WithTransformMatcher) NegatedFailureMessage(_ interface{}) (message string) {
 	return m.Matcher.NegatedFailureMessage(m.transformedValue)
 }
+
+func (m *WithTransformMatcher) MatchMayChangeInTheFuture(_ interface{}) bool {
+	return asyncassertion.MatchMayChangeInTheFuture(m.Matcher, m.transformedValue)
+}
diff --git a/matchers/with_transform_test.go b/matchers/with_transform_test.go
index 4d1a363..7ac6f1c 100644
--- a/matchers/with_transform_test.go
+++ b/matchers/with_transform_test.go
@@ -4,6 +4,7 @@
 	"errors"
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
+	. "github.com/onsi/gomega/matchers"
 )
 
 var _ = Describe("WithTransformMatcher", func() {
@@ -84,4 +85,24 @@
 			})
 		})
 	})
+
+	Context("MatchMayChangeInTheFuture()", func() {
+		It("Propogates value from wrapped matcher on the transformed value", func() {
+			// dummy struct that holds a channel
+			type S struct{ C chan int }
+			getC := func(s S) chan int { return s.C } // extracts channel from struct
+			// wrap a Receive matcher, which does implement this method
+			var i int
+			m := WithTransform(getC, Receive(&i))
+			s := S{make(chan int)}
+			close(s.C)
+			Expect(m.Match(s)).To(BeFalse())
+			Expect(m.(*WithTransformMatcher).MatchMayChangeInTheFuture(s)).To(BeFalse()) // channel closed so Receive return false
+		})
+		It("Defaults to true", func() {
+			m := WithTransform(plus1, Equal(2)) // Equal does not have this method
+			Expect(m.Match(1)).To(BeTrue())
+			Expect(m.(*WithTransformMatcher).MatchMayChangeInTheFuture(1)).To(BeTrue()) // defaults to true
+		})
+	})
 })