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

2024-12-19


845. What is the “first declaration” of an explicit specialization?

Section: 9.5  [dcl.fct.def]     Status: CD2     Submitter: Daveed Vandevoorde     Date: 20 March, 2009

[Voted into WP at March, 2010 meeting.]

According to 9.5 [dcl.fct.def] paragraph 10,

A deleted definition of a function shall be the first declaration of the function.

The Standard is not currently clear about what the “first declaration” of an explicit specialization of a function template is. For example,

    template<typename T> void f() { }
    template<> void f<int>() = delete;  // First declaration?

Proposed resolution (October, 2009):

A deleted definition of a function shall be the first declaration of the function or, for an explicit specialization of a function template, the first declaration of that specialization.

(This resolution also resolves issue 915.)

Notes from the October, 2009 meeting:

It was observed that this specification is complicated by the fact that the “first declaration” of a function might be in a block-extern declaration.