+2018-03-14 Jason Merrill <jason@redhat.com>
+
+ PR c++/81236 - auto variable and auto function
+ * pt.c (tsubst_baselink): Update the type of the BASELINK after
+ mark_used.
+
2018-03-14 Jason Merrill <jason@redhat.com>
PR c++/83916 - ICE with template template parameters.
/* If lookup found a single function, mark it as used at this point.
(If lookup found multiple functions the one selected later by
overload resolution will be marked as used at that point.) */
- if (!template_id_p && !really_overloaded_fn (fns)
- && !mark_used (OVL_FIRST (fns), complain) && !(complain & tf_error))
- return error_mark_node;
+ if (!template_id_p && !really_overloaded_fn (fns))
+ {
+ tree fn = OVL_FIRST (fns);
+ bool ok = mark_used (fn, complain);
+ if (!ok && !(complain & tf_error))
+ return error_mark_node;
+ if (ok && BASELINK_P (baselink))
+ /* We might have instantiated an auto function. */
+ TREE_TYPE (baselink) = TREE_TYPE (fn);
+ }
if (BASELINK_P (baselink))
{
--- /dev/null
+// CWG issue 2335
+// { dg-do compile { target c++14 } }
+
+template <class... Ts> struct partition_indices {
+ static auto compute_right () {}
+ static constexpr auto right = compute_right;
+};
+auto foo () -> partition_indices<>;
+void f() {
+ auto x = foo();
+ auto y = x.right;
+}