[Bug c++/50280] New: Incorrect type deduced for T& when passed a const bitfield
jyasskin at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Sep 3 00:50:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50280
Bug #: 50280
Summary: Incorrect type deduced for T& when passed a const
bitfield
Classification: Unclassified
Product: gcc
Version: 4.6.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: jyasskin@gcc.gnu.org
$ cat test.cc
struct S { int bf : 3; };
template<class _T1>
void make_pair(_T1& __x) {}
void foo() {
const S s = S();
make_pair(s.bf);
}
$ g++-4.6 -c test.cc
test.cc: In function 'void foo()':
test.cc:8:17: error: cannot bind bitfield 's.S::bf' to 'int&'
$ clang++ -c test.cc
$
It looks like gcc is deducing the parameter type from the base type of the
bitfield rather than its type modified by qualifiers on the containing object.
This seems related to PR43663, but isn't the same issue because using "const
_T1&" in make_pair makes this compile.
This showed up when compiling a make_pair(val, bitfield) call in C++0x mode
that worked in C++98 mode, but the underlying issue is present in C++98 too.
More information about the Gcc-bugs
mailing list