Adds initial support for matching constrained out-of-class member
function definitions to their declarations. Like so:

template<typename T>
  struct S
  {
    void f(const T& x)
      requires Copyable<T>();
  };

template<typename T>
  void S<T>::f() requires Copyable<T>() { ... };

This does not a complete solution. It won't correctly match S<T>
against specializations (if any exist), nor will it match f, if f is
declared as a member function template. I'll address this after some
changes to class templates.

Changelog:

2013-06-24  Andrew Sutton  <andrew.n.sut...@gmail.com>
        * gcc/cp/parser.c (cp_parser_init_declarator): Parse template
        requirements for out-of-class member definitions.
        * gcc/cp/decl2.c (check_classfn): Include match out-of-class
        definitions using constraints.
        * gcc/cp/constraint.cc (equivalently_constrained). Use get_constraints.
        (more_constrained). Use get_constraints.

Andrew

Attachment: memfun.patch
Description: Binary data

Reply via email to