[Bug c++/38612] New: Vague error diagnostics for pointer-to-member type incompatibility
bruck dot michael at googlemail dot com
gcc-bugzilla@gcc.gnu.org
Tue Dec 23 15:52:00 GMT 2008
Consider this example:
--
struct Base {};
struct X; // X derived from Base later but incomplete
here
struct Y {}; // Y not derived from Base
int test1(int Base::* p2m, X* object)
{
return object->*p2m; // fails because X is incomplete
}
struct X : Base
{
};
int test2(int Base::* p2m, X* object)
{
return object->*p2m; // OK
}
int test3(int Base::* p2m, Y* object)
{
return object->*p2m; // fails because Y is not derived from A
}
--
produces the following errors:
In function 'int test1(int Base::*, X*)':
error: pointer to member type 'int' incompatible with object type 'X'
In function 'int test3(int Base::*, Y*)':
error: pointer to member type 'int' incompatible with object type 'Y'
The error messages could be made more useful to the user by
a) including the class type of the pointer to member type or the full p2m type
(this might be a bug, depending on whether the programmer's intention was to
actually print that instead of the rather uninteresting pointed-to type)
b) adding to the message for test1 something that points out that X was
incomplete when evaluated.
The code in cp/typeck2.c build_m_component_ref() uses a shortcut here to print
the identical message for two errors that have very different implications from
the user's perspective.
--
Summary: Vague error diagnostics for pointer-to-member type
incompatibility
Product: gcc
Version: 4.3.2
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: bruck dot michael at googlemail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38612
More information about the Gcc-bugs
mailing list