This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/64562] New: Member functions with r-value reference for *this and deduced return type incorrectly rejected as ambiguous
- From: "sneves at dei dot uc.pt" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 12 Jan 2015 02:51:54 +0000
- Subject: [Bug c++/64562] New: Member functions with r-value reference for *this and deduced return type incorrectly rejected as ambiguous
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64562
Bug ID: 64562
Summary: Member functions with r-value reference for *this and
deduced return type incorrectly rejected as ambiguous
Product: gcc
Version: 4.9.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: sneves at dei dot uc.pt
Consider the following program:
#include <iostream>
#define RETURN_TYPE auto
namespace {
struct S {
RETURN_TYPE operator--() && {
return 1;
}
RETURN_TYPE operator--() const && {
return 2;
}
RETURN_TYPE operator--() & {
return 3;
}
RETURN_TYPE operator--() const & {
return 4;
}
};
const S callme() { return {}; }
auto f1() {
return --S();
}
auto f2() {
return --callme();
}
auto f3() {
S s;
return --s;
}
auto f4() {
const S s {};
return --s;
}
}
int main() {
std::cout << f1() << " ";
std::cout << f2() << " ";
std::cout << f3() << " ";
std::cout << f4() << std::endl;
}
The expected output would be "1 2 3 4". When RETURN_TYPE is defined to be
"int", this is the result obtained. GCC (versions ranging from 4.8.2 to the
latest build), however, rejects this code when RETURN_TYPE is defined to be
"auto" or "decltype(auto)".