On 07/17/2012 08:45 AM, Paolo Carlini wrote:
-check_default_argument (tree decl, tree arg)
+check_default_argument (tree decl, tree arg, tsubst_flags_t complain)

Hmm, I don't think substitution of default arguments can cause deduction failure; it happens after we've chosen which function to call. What was the motivation for the default argument changes?

+    tmp = error_mark_node;

Let's use a more informative name than "tmp" for these flags.

-void
-perform_deferred_access_checks (void)
+bool
+perform_deferred_access_checks (tsubst_flags_t complain)

Need to document what the return value means.

-  if (complain & tf_error)
-    perform_or_defer_access_check (TYPE_BINFO (context), t, t);

+  if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
+    return error_mark_node;

These changes along with the enforce_access handling of cxx_dialect break C++03 code that currently works, such as

template <class T>
class A
{
  typedef T I;
};

template <class T>
void f(typename T::I);

template <class T>
void f(int);

int main()
{
  f<A<float> > (1);
}

Under the C++03 rules, we don't get access errors when generating overload candidates, we get them when the function is instantiated (i.e. in instantiate_decl).

Hmm, now that I look at the code in instantiate_decl for re-substituting to get additional errors, I guess I should have factored that code out into a separate function and used it in the access7 patch rather than add handling of FNDECL_RECHECK_ACCESS_P in tsubst_decl.

Jason

Reply via email to