<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 517</TITLE>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<STYLE TYPE="text/css">
  INS { text-decoration:none; font-weight:bold; background-color:#A0FFA0 }
  .INS { text-decoration:none; background-color:#D0FFD0 }
  DEL { text-decoration:line-through; background-color:#FFA0A0 }
  .DEL { text-decoration:line-through; background-color: #FFD0D0 }
  @media (prefers-color-scheme: dark) {
    HTML { background-color:#202020; color:#f0f0f0; }
    A { color:#5bc0ff; }
    A:visited { color:#c6a8ff; }
    A:hover, a:focus { color:#afd7ff; }
    INS { background-color:#033a16; color:#aff5b4; }
    .INS { background-color: #033a16; }
    DEL { background-color:#67060c; color:#ffdcd7; }
    .DEL { background-color:#67060c; }
  }
  SPAN.cmnt { font-family:Times; font-style:italic }
</STYLE>
</HEAD>
<BODY>
<P><EM>This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21
  Core Issues List revision 118b.
  See http://www.open-std.org/jtc1/sc22/wg21/ for the official
  list.</EM></P>
<P>2025-09-28</P>
<HR>
<A NAME="517"></A><H4>517.
  
Partial specialization following explicit instantiation
</H4>
<B>Section: </B>13.7.6.1&#160; [<A href="https://wg21.link/temp.spec.partial.general">temp.spec.partial.general</A>]
 &#160;&#160;&#160;

 <B>Status: </B>CD1
 &#160;&#160;&#160;

 <B>Submitter: </B>John Spicer
 &#160;&#160;&#160;

 <B>Date: </B>03 May 2005<BR>


<P>[Voted into WP at the October, 2006 meeting.]</P>

<P>According to 13.7.6.1 [<A href="https://wg21.link/temp.spec.partial.general#1">temp.spec.partial.general</A>] paragraph 1,</P>

<BLOCKQUOTE>

If a template is partially specialized then that partial
specialization shall be declared before the first use of that partial
specialization that would cause an implicit instantiation to take
place, in every translation unit in which such a use occurs; no
diagnostic is required.

</BLOCKQUOTE>

<P>This leaves the impression that an explicit instantiation of the
primary template may precede the declaration of an applicable partial
specialization.  Is the following example well-formed?</P>

<PRE>
    template&lt;typename T&gt; class X{
        public:
        void foo(){};
    };

    template class X&lt;void *&gt;;

    template&lt;typename T&gt; class X&lt;T*&gt;{
        public:
        void baz();
    };

    void bar() {
        X&lt;void *&gt; x;
        x.foo();
    }
</PRE>

<P><B>Proposed resolution (October, 2005):</B></P>

<P>Replace the last sentence of 13.7.6.1 [<A href="https://wg21.link/temp.spec.partial.general#1">temp.spec.partial.general</A>] paragraph 1:
</P>

<BLOCKQUOTE>

If a template is partially specialized then that partial
specialization shall be declared before the first use of that partial
specialization that would cause an implicit instantiation to take
place, in every translation unit in which such a use occurs; no
diagnostic is required.

</BLOCKQUOTE>

<P>with:</P>

<BLOCKQUOTE>

A partial specialization shall be declared before the first use of a
class template specialization that would make use of the partial
specialization as the result of an implicit or explicit instantiation
in every translation unit in which such a use occurs; no diagnostic is
required.

</BLOCKQUOTE>

<BR><BR>
</BODY>
</HTML>
