This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 110b. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.

2023-01-15


105. Meaning of "template function"

Section: Clause 13  [temp]     Status: TC1     Submitter: Daveed Vandevoorde     Date: 16 Apr 1999

The phrase "template function" is sometimes used to refer to a template (e.g., in Clause 13 [temp] paragraph 8) and sometimes to refer to a function generated from a template (e.g., 12.3 [over.over] paragraph 4) .

Suggested Resolution:

The phrase should mean "a function generated from a template" (or might perhaps include explicit specializations).

Proposed resolution (10/00):

In Clause 3 [intro.defs] “signature,” replace "template function specialization" by "function template specialization".

In 11.4.2 [class.mfct] paragraph 2, replace "template member functions" by "member functions of class templates and member function templates."

In 12.2.2 [over.match.funcs] paragraph 7 and footnote, replace all instances of "template functions" by "function template specializations."

In 12.2.4 [over.match.best] paragraph 1, fourth bullet (counting all bullets in that paragraph), replace "template function specialization" by "function template specialization". In the fifth bullet, replace "template functions" by "function template specializations."

In 12.3 [over.over] paragraph 2, replace "template function" by "function template specialization."

Change 12.3 [over.over] paragraph 4 from:

If more than one function is selected, any template functions in the set are eliminated if the set also contains a non-template function, and any given template function is eliminated if the set contains a second template function that is more specialized than the first according to the partial ordering rules of 13.7.7.3 [temp.func.order]. After such eliminations, if any, there shall remain exactly one selected function.
to:
If more than one function is selected, any function template specializations in the set are eliminated if the set also contains a non-template function, and any given function template specialization F1 is eliminated if the set contains a second function template specialization whose function template is more specialized than the function template of F1 according to the partial ordering rules of 13.7.7.3 [temp.func.order]. After such eliminations, if any, there shall remain exactly one selected function.

Change text in section Clause 13 [temp] paragraph 8 from:

A template function declared both exported and inline is just inline and not exported.
to:
A function template declared both exported and inline is just inline and not exported.

In 13.7.5 [temp.friend] paragraph 1, third bullet, replace "template function" by "function template" and "function specialization" by "function template specialization."

In footnote 130 (13.7.7 [temp.fct] paragraph 2), replace "template functions" by "function template specializations."

In 13.7.7.3 [temp.func.order] paragraph 1, third bullet change "template function specialization" to "function template specialization".

In 13.10.3 [temp.deduct] paragraph 1, change "template function specialization" to "function template specialization".

In _N4567_.17.3 [definitions] “component” change "non-member template functions that operate" to "non-member function templates that operate".

In _N4567_.17.3 [definitions] “traits class” change "template classes and template functions" to "class templates and function templates".

In 22.2 [utility] paragraph 1 change:

This subclause contains some basic template functions and classes that are used throughout the rest of the library.
to:
This subclause contains some basic function and class templates that are used throughout the rest of the library.

In 22.3 [pairs] paragrah 1 change "template function" to "function template".

In footnote 215 (_N3225_.20.8.11 [function.pointer.adaptors] paragraph 6) change "template functions" to "function templates".

In 30.3.1 [locale] paragraph 4 change "template function" to "function template".

In 25.3 [iterator.requirements] paragraph 2 change "template function" to "function template".

In 25.4.2 [std.iterator.tags] paragraph 1, change "template function" to "function template specialization."

In 25.4.3 [iterator.operations] paragraph 1 change "template function" to "function template", and "These functions use" to "These function templates use".

In the section heading of 31.7.6.3.4 [ostream.inserters.character] change "template functions" to "function templates".

In 16.3.2.3 [structure.requirements] paragraph 2 change "template class name char_traits" to "class template char_traits".

In the section heading of 17.3.5 [numeric.limits] change "Template class" to "Class template".

In 16.4.4.6 [allocator.requirements] paragraph 3 change "template class member rebind" to "member class template rebind" and change "template typedef" to "typedef template".

In the section heading of _N4140_.D.9.1 [depr.lib.binder.1st] change "Template class" to "Class template".

In the section heading of _N4140_.D.9.3 [depr.lib.binder.2nd] change "Template class" to "Class template".

In the section heading of _N4140_.D.10.1 [auto.ptr] change "Template class" to "Class template".

In the section heading of 23.4.3 [basic.string] change "Template class" to "Class template".

In 23.4.3 [basic.string] paragraphs 1 and 2 change "template class basic_string" to "class template basic_string".

In the section heading of 30.4.2.2 [locale.ctype] change "Template class" to "Class template".

In the section heading of 30.4.2.3 [locale.ctype.byname] change "Template class" to "Class template".

In the section heading of 30.4.2.5 [locale.codecvt] change "Template class" to "Class template".

In the section heading of 30.4.2.6 [locale.codecvt.byname] change "Template class" to "Class template".

In the section heading of 30.4.3.2 [locale.num.get] change "Template class" to "Class template".

In the section heading of 30.4.3.3 [locale.nm.put] change "Template class" to "Class template".

In the section heading of 30.4.4.1 [locale.numpunct] change "Template class" to "Class template".

In the section heading of 30.4.4.2 [locale.numpunct.byname] change "Template class" to "Class template".

In the section heading of 30.4.5.1 [locale.collate] change "Template class" to "Class template".

In the section heading of 30.4.5.2 [locale.collate.byname] change "Template class" to "Class template".

In the section heading of 30.4.6.2 [locale.time.get] change "Template class" to "Class template".

In the section heading of 30.4.6.3 [locale.time.get.byname] change "Template class" to "Class template".

In the section heading of 30.4.6.4 [locale.time.put] change "Template class" to "Class template".

In the section heading of 30.4.6.5 [locale.time.put.byname] change "Template class" to "Class template".

In the section heading of 30.4.7.2 [locale.money.get] change "Template class" to "Class template".

In the section heading of 30.4.7.3 [locale.money.put] change "Template class" to "Class template".

In the section heading of 30.4.7.4 [locale.moneypunct] change "Template class" to "Class template".

In the section heading of 30.4.7.5 [locale.moneypunct.byname] change "Template class" to "Class template".

In the section heading of 30.4.8.2 [locale.messages] change "Template class" to "Class template".

In the section heading of 30.4.8.3 [locale.messages.byname] change "Template class" to "Class template".

In the section heading of 24.3.8 [deque] change "Template class" to "Class template".

In the section heading of 24.3.10 [list] change "Template class" to "Class template".

In the section heading of 24.6.6 [queue] change "Template class" to "Class template".

In the section heading of 24.6.7 [priority.queue] change "Template class" to "Class template".

In the section heading of 24.6.8 [stack] change "Template class" to "Class template".

In the section heading of 24.3.11 [vector] change "Template class" to "Class template".

In the section heading of 24.4.4 [map] change "Template class" to "Class template".

In the section heading of 24.4.5 [multimap] change "Template class" to "Class template".

In the section heading of 24.4.6 [set] change "Template class" to "Class template".

In the section heading of 24.4.7 [multiset] change "Template class" to "Class template".

In the section heading of 22.9.2 [template.bitset] change "Template class" to "Class template".

In 22.9.2 [template.bitset] paragraph 1, change "template class" to "class template".

In the section heading of 25.5.1.2 [reverse.iterator] change "Template class" to "Class template".

In the section heading of 25.5.2.2 [back.insert.iterator] change "Template class" to "Class template".

In the section heading of 25.5.2.3 [front.insert.iterator] change "Template class" to "Class template".

In the section heading of 25.5.2.4 [insert.iterator] change "Template class" to "Class template".

In 25.6 [stream.iterators] paragraph 1, change "template classes" to "class templates".

In the section heading of 25.6.2 [istream.iterator] change "Template class" to "Class template".

In the section heading of 25.6.3 [ostream.iterator] [lib.ostream.iterator] change "Template class" to "Class template".

In the section heading of 25.6.4 [istreambuf.iterator] change "Template class" to "Class template".

In 25.6.4 [istreambuf.iterator] paragraph 1, change "template class" to "class template".

In the section heading of 25.6.4.2 [istreambuf.iterator.proxy] change "Template class" to "Class template".

In the section heading of 25.6.5 [ostreambuf.iterator] change "Template class" to "Class template".

In 25.6.5 [ostreambuf.iterator] paragraph 1, change "template class" to "class template".

In 28.4 [complex.numbers] paragraph 1, change "template class" to "class template".

In the section heading of 28.4.3 [complex] change "Template class" to "Class template".

In 28.6.1 [valarray.syn] paragraph 1, change "template classes" to "class templates" and change "function signatures" to "function templates".

In the section heading of 28.6.2 [template.valarray] change "Template class" to "Class template".

In the section heading of 28.6.5 [template.slice.array] change "Template class" to "Class template".

In the section heading of 28.6.7 [template.gslice.array] change "Template class" to "Class template".

In the section heading of 28.6.8 [template.mask.array] change "Template class" to "Class template".

In the section heading of 28.6.9 [template.indirect.array] change "Template class" to "Class template".

In 31.3 [iostream.forward] [lib.iostream.forward] paragraphs 3 to 7, change "template classes" to "class templates". [Note: Some editorial changes were made in paragraphs 2 to 8 when these changes were applied in September 2001.]

In the section heading of 31.5.3 [fpos] change "Template class" to "Class template".

In the section heading of 31.5.4 [ios] change "Template class" to "Class template".

In the section heading of 31.6.3 [streambuf] change "Template class" to "Class template".

In 31.6.3 [streambuf] paragraphs 2 and 3, change "template class" to "class template".

In the section heading of 31.7.5.2 [istream] change "Template class" to "Class template".

In the section heading of 31.7.5.7 [iostreamclass] change "Template class" to "Class template".

In the section heading of 31.7.6.2 [ostream] change "Template class" to "Class template".

In 31.8 [string.streams] paragraph 1 change "template classes" to "class templates".

In the section heading of 31.8.2 [stringbuf] change "Template class" to "Class template".

In the section heading of 31.8.3 [istringstream] change "Template class" to "Class template".

In the section heading of 31.8.5 [stringstream] change "Template class" to "Class template".

In the section heading of 31.10.2 [filebuf] change "Template class" to "Class template".

In the section heading of 31.10.3 [ifstream] change "Template class" to "Class template".

In the section heading of 31.10.4 [ofstream] change "Template class" to "Class template".

In the section heading of 31.10.5 [fstream] change "Template class" to "Class template".