<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - __builtin_offsetof doesn't allow scope qualifiers"
   href="https://bugs.llvm.org/show_bug.cgi?id=34630">34630</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>__builtin_offsetof doesn't allow scope qualifiers
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>C++
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>myriachan@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>dgregor@apple.com, llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>The following code does not compile, with a syntax error:

#include <cstddef>

struct A { int x; };
struct B { };
struct C : A, B { };

int meow()
{
  return offsetof(C, A::x);
}

error: expected ')'

Whether this should be allowed in C++ is an interesting question.  C++ defers
to C, which says a "member-designator" here, but then doesn't define that. 
(There's a WG14 defect report somewhere on this, to be fixed for C2x?)

Normally, this wouldn't be necessary, because the first parameter should be a
standard-layout type, which can't have non-static members of conflicting names.
 But pretty much every compiler supports offsetof() on everything but virtual
inheritance cases, so people use it.  (Also, there's a C++ proposal in the
works to formally allow offsetof for any class not involving the word
"virtual".)

GCC allows this.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>