diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index 024fa8a5529029110b12477836de7fbfeb6c9f25..747e627f5478f813b75c1023a18f04341fa95f64 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -23787,6 +23787,8 @@ resolve_overloaded_unification (tree tparms,
     for (lkp_iterator iter (arg); iter; ++iter)
       {
 	tree fn = *iter;
+	if (flag_noexcept_type)
+	  maybe_instantiate_noexcept (fn, tf_none);
 	if (try_one_overload (tparms, targs, tempargs, parm, TREE_TYPE (fn),
 			      strict, sub_strict, addr_p, explain_p)
 	    && (!goodfn || !decls_match (goodfn, fn)))
diff --git a/gcc/testsuite/g++.dg/cpp1z/noexcept-type28.C b/gcc/testsuite/g++.dg/cpp1z/noexcept-type28.C
new file mode 100644
index 0000000000000000000000000000000000000000..bf0b927b8ec928a93b141b7b4853ac2376ce7a1a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/noexcept-type28.C
@@ -0,0 +1,18 @@
+// PR c++/113108
+// { dg-do compile { target c++17 } }
+
+template <typename T>
+struct Foo {
+    Foo& operator=(Foo&&) = default;
+    T data;
+};
+
+template <typename T>
+void consume(Foo<T>& (Foo<T>::*)(Foo<T>&&) ) {}
+
+template <typename T>
+void consume(Foo<T>& (Foo<T>::*)(Foo<T>&&) noexcept) {}
+
+int main() {
+    consume(&Foo<int>::operator=);
+}