<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 960</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="960"></A><H4>960.
  
Covariant functions and lvalue/rvalue references
</H4>
<B>Section: </B>11.7.3&#160; [<A href="https://wg21.link/class.virtual">class.virtual</A>]
 &#160;&#160;&#160;

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

 <B>Submitter: </B>James Widman
 &#160;&#160;&#160;

 <B>Date: </B>1 September, 2009<BR>


<P>[Voted into WP at March, 2010 meeting.]</P>



<P>11.7.3 [<A href="https://wg21.link/class.virtual#5">class.virtual</A>] paragraph 5 requires that covariant
return types be either both pointers or both references, but it does
not specify that references must be both lvalue references or both
rvalue references.  Presumably this is an oversight.</P>

<P><B>Proposed resolution (February, 2010):</B></P>

<P>Change 11.7.3 [<A href="https://wg21.link/class.virtual#5.1">class.virtual</A>] bullet 5.1 as follows:</P>

<BLOCKQUOTE>

<P>...If a function <TT>D::f</TT> overrides a function
<TT>B::f</TT>, the return types of the functions are covariant if
they satisfy the following criteria:</P>

<UL>
<LI><P>both are pointers to classes<INS>, both are lvalue references
to classes,</INS> or <INS>both are rvalue</INS> references to
classes<SUP>106</SUP>
</P></LI>

<LI><P>...</P></LI>

</UL>

</BLOCKQUOTE>

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