[Bug c++/78704] New: operator-> pointer return type is not recognized as pointer type
joseph.h.garvin at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Dec 6 20:44:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78704
Bug ID: 78704
Summary: operator-> pointer return type is not recognized as
pointer type
Product: gcc
Version: 6.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: joseph.h.garvin at gmail dot com
Target Milestone: ---
My coworker Jay Miller discovered this but he couldn't create an account
because of the spam restriction in effect. He tried to send an e-mail to the
overseers list as suggested but it bounced back -- it's possible nobody can
create accounts or request them right now.
In this minimal test case operator-> returns a pointer type but neither GCC 4.9
or 6.2 recognize it as such:
struct Object
{
int key;
};
// Making this a class rather than a template allows it to compile
template <typename Key>
class Foo
{
public:
// Changing the returning type to const Object* allows it to compile
auto operator->() const { return &b; }
private:
Object b;
};
// Making this a class rather than a template allows it to compile
template <typename T>
class X
{
protected:
Foo<int> cont;
public:
int get_val() const
{
// error: result of 'operator->()' yields non-pointer result
return cont->key;
// Calling operator-> directory compiles fine
//return cont.operator->()->key;
}
};
int main()
{
return 0;
}
More information about the Gcc-bugs
mailing list