<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 1472</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="1472"></A><H4>1472.
  
odr-use of reference variables
</H4>
<B>Section: </B>6.3&#160; [<A href="https://wg21.link/basic.def.odr">basic.def.odr</A>]
 &#160;&#160;&#160;

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

 <B>Submitter: </B>Richard Smith
 &#160;&#160;&#160;

 <B>Date: </B>2012-03-01<BR>


<P>[Moved to DR at the April, 2013 meeting.]</P>



<P>We have a special case in 6.3 [<A href="https://wg21.link/basic.def.odr#2">basic.def.odr</A>] paragraph 2 that
variables which satisfy the requirements for appearing in a constant
expression are not odr-used if the lvalue-to-rvalue conversion is
immediately applied. This special case only applies to objects, and
thus does not apply to variables of reference type.  This
inconsistency seems strange, and there is implementation divergence:
</P>

<PRE>
  int n;
  void f() {
   constexpr int &amp;r = n;
   [] { return r; }; //<SPAN CLASS="cmnt"> error: </SPAN>r<SPAN CLASS="cmnt"> is odr-used but not captured</SPAN>
  }
</PRE>

<P>This code is accepted by g++ but rejected by clang. Should <TT>r</TT> be
odr-used here?
</P>

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

<P>Change 6.3 [<A href="https://wg21.link/basic.def.odr#3">basic.def.odr</A>] paragraph 3 as follows:</P>

<BLOCKQUOTE>

A variable <TT>x</TT> whose name appears as a potentially-evaluated
expression <TT>ex</TT> is <I>odr-used</I> unless <TT>x</TT> <DEL>is an
object that</DEL> satisfies the requirements for appearing in a
constant expression (7.7 [<A href="https://wg21.link/expr.const">expr.const</A>]) and<INS>, if
<TT>x</TT> is an object,</INS> <TT>ex</TT> is an element of the set of
potential results of an expression <TT>e</TT>, where either the
lvalue-to-rvalue conversion (7.3.2 [<A href="https://wg21.link/conv.lval">conv.lval</A>]) is applied to
<TT>e</TT>, or <TT>e</TT> is a discarded-value expression (
Clause 7 [<A href="https://wg21.link/expr">expr</A>]).  <TT>this</TT> is odr-used...

</BLOCKQUOTE>

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