[C++ PATCH] Core issue #226: Default template arguments in function templates

Doug Gregor doug.gregor@gmail.com
Tue Mar 27 14:09:00 GMT 2007


Hello,

The attached patch implements the resolution to core issue #226,
default template arguments in function templates, which has been part
of the C++0x working paper for a few years:

  http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226

In summary, unlike in C++98/03, default template arguments *are*
allowed in C++0x function templates. There are some restrictions
regarding what one can do with default template arguments for friend
function templates, but otherwise the use of this feature is obvious,
and the implementation relatively simple.

The patch below enables default template arguments for function
templates only when the experimental C++0x mode is enabled
(-std=c++0x). Once this patch goes in, I'll update the changes
document for GCC 4.3.

Tested i386-apple-darwin8.8.1; no regressions.

Okay for mainline?

:ADDPATCH c++:

  Cheers,
  Doug

2007-03-27  Douglas Gregor  <doug.gregor@gmail.com>

	* g++.dg/cpp0x/temp_default1.C: New.
	* g++.dg/cpp0x/temp_default3.C: New.
	* g++.dg/cpp0x/temp_default2.C: New.
	* g++.dg/cpp0x/temp_default4.C: New.
	
2007-03-27  Douglas Gregor  <doug.gregor@gmail.com>

	* decl.c (redeclaration_error_message): Complain when redeclaring
	a friend function with default template arguments (C++0x mode only).
	* cp-tree.h (check_default_tmpl_args): Declare.
	* pt.c (check_default_tmpl_args): In C++0x mode, permit default
	template arguments in function templates. Add support for checking
	the default template arguments of friend templates.
	(push_template_decl_real): Fix call to check_default_tmpl_args.
	(type_unification_real): If a template parameter has not been
	deduced but provides a default template argument, substitute into
	that default template argument.
	* parser.c (cp_parser_init_declarator): When declaring (but not
	defining!) a function template in C++0x mode, check for default
	template arguments.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: def-temp-arg-in-func-temp.patch
Type: application/octet-stream
Size: 12590 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20070327/7c67960b/attachment.obj>


More information about the Gcc-patches mailing list