This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/33616] New: "lvalue required as unary '&' operand" with template pmf
- From: "mdorey at bluearc dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 1 Oct 2007 21:42:06 -0000
- Subject: [Bug c++/33616] New: "lvalue required as unary '&' operand" with template pmf
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
devadmin@diesel:/tmp$ cat > non-lvalue-pmf.cpp
struct Receive {
};
struct TcpStats {
Receive rx;
};
typedef void (Receive::*StatsGatherer)(void);
template <StatsGatherer gatherStats>
void test(TcpStats* tcpStats) {
(tcpStats->rx.*gatherStats)();
}
devadmin@diesel:/tmp$ g++ -W -Wall -pedantic -g -c -o non-lvalue-pmf.o non-lv
alue-pmf.cpp
non-lvalue-pmf.cpp: In function ?void test(TcpStats*)?:
non-lvalue-pmf.cpp:12: error: lvalue required as unary '&' operand
devadmin@diesel:/tmp$
If this is indeed a bug then it's a regression between 3.3.6 (Debian
1:3.3.6-15) and Debian 4.2.1-5:
devadmin@diesel:/tmp$ g++-3.3 -W -Wall -pedantic -g -c -o non-lvalue-pmf.o
non-lvalue-pmf.cpp
devadmin@diesel:/tmp$
The regression, if that's what it is, was before 4.1.3 20070831 (prerelease)
(Debian 4.1.2-16). The error message was improved between 4.1 and 4.2 but the
same underlying problem is in 4.1.
Various easy and harmless work-arounds are possible, for example, changing the
body of the function to read:
Receive& rx = tcpStats->rx;
(rx.*gatherStats)();
I tried to simplify the example further but I've been unable to. One of the
changes that makes the problem go away is to replace the line:
template <StatsGatherer gatherStats>
With:
StatsGatherer gatherStats;
I don't see why that should affect the "lvalue-ness" of tcpStats->rx but I've
been wrong about such things many times before and I look forward to being
amazed.
Extra parentheses around (tcpStats->rx) don't help, just to save anyone from
looking up the operator precedence tables (which was the first thing I did).
--
Summary: "lvalue required as unary '&' operand" with template pmf
Product: gcc
Version: 4.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: mdorey at bluearc dot com
GCC build triplet: x86_64-linux-gnu
GCC host triplet: x86_64-linux-gnu
GCC target triplet: x86_64-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33616