The following C++ program should not compile:

struct S {
  unsigned int bar : 3;
} s;

int foo(unsigned int &);
int foo(double);

int
main ()
{
  return foo(s.bar);  // invalid
}

According to the C++ standard, clause 13.3.3.1.4, paragraph 4, the 'bar' should
match against 'foo(unsigned int &)' because both use unsigned int, not the
alternative overload, 'foo(double)'. However, it should then fail because a
bit-field may not be bound to a reference.

GCC 4.1.1 and 4.1.2 did this correctly.

GCC 4.2.0+ silently accept it. The call is incorrectly bound to foo(double).


-- 
           Summary: [4.2/4.3 Regression] bit-fields, references and
                    overloads
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: andrew dot stubbs at st dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33984

Reply via email to