<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span>Hi all,<br>
</span>
<div><br>
</div>
<div>The following code snippet will compile with GCC, but not with LLVM:<br>
</div>
<div><br>
</div>
<div>constexpr unsigned g(const float *) { return 3; }<br>
</div>
<div>unsigned f() {<br>
</div>
<div>  const float x[] = {1.0};<br>
</div>
<div>  enum  { SIZE = g(x) };<br>
</div>
<div>  return SIZE;<br>
</div>
<div>}<br>
</div>
<div><br>
</div>
<div>At first glance, this looks fine to me, as the expression in the assignment is a constexpr function call with a const parameter.<br>
</div>
<div>Clang however errors with "reference to local variable 'x' declared in enclosing function".<br>
</div>
<div><br>
</div>
<div>I traced this down to the function getParentOfCapturingContextOrNull in SemaExpr.cpp, which will diagnose the variable reference uncapturable if it does not appear in a block literal, captured statement, or lambda expression.</div>
<div><br>
</div>
<div>My question is: Why does this list not contain enum declarations, at least if the declaration is local and the variable is in the same scope?</div>
<div><br>
</div>
<div>I tried to find a mention of this in the C++ standard, but did not succeed so far.<br>
</div>
<div>If this is a bug I'm happy to file it on bugzilla, but I first wanted to ask what the opinions are on whether this code should be valid or not.<br>
</div>
<div><br>
</div>
<div>Kind regards,<br>
</div>
<span>Anna</span><br>
</div>
</body>
</html>