Title
Type matching of non-type template parameters and arguments
Status
c++14
Section
13.10.3.6 [temp.deduct.type]
Submitter
Canada

Created on 2013-09-24.00:00:00 last changed 122 months ago

Messages

Date: 2014-02-15.00:00:00

[Moved to DR at the February, 2014 meeting.]

Date: 2013-09-15.00:00:00

Proposed resolution (September, 2013):

Change 13.10.3.6 [temp.deduct.type] paragraph 17 as follows:

If, in the declaration of a function template with a non-type template-parameter, the non-type template-parameter is used in an expression in the function parameter-list and, if the corresponding template-argument is deduced, the template-argument type shall match the type of the template-parameter exactly, except that a template-argument deduced from an array bound may be of any integral type P has a form that contains <i>, and if the type of the corresponding value of A differs from the type of i, deduction fails. If P has a form that contains [i], and if the type of i is not an integral type, deduction fails.147 [Example:...
Date: 2013-09-24.00:00:00
N3690 comment CA 15

According to 13.10.3.6 [temp.deduct.type] paragraph 17,

If, in the declaration of a function template with a non-type template-parameter, the non-type template-parameter is used in an expression in the function parameter-list and, if the corresponding template-argument is deduced, the template-argument type shall match the type of the template-parameter exactly, except that a template-argument deduced from an array bound may be of any integral type.

This does not cover return types, leaving the outcome of an example like the following unclear:

  template <int N> struct A;

  template <short N>
  A<N> *foo();

  void bar() {
    A<1> *(*fp)(void) = &foo;
  }
History
Date User Action Args
2014-11-24 00:00:00adminsetstatus: dr -> c++14
2014-03-03 00:00:00adminsetmessages: + msg4968
2014-03-03 00:00:00adminsetstatus: ready -> dr
2013-10-14 00:00:00adminsetmessages: + msg4604
2013-09-24 00:00:00admincreate