This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/53421] New: __attribute((__may_alias__)) prevents taking address of conversion operator member function
- From: "jeffrey.hellrung at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sat, 19 May 2012 20:29:30 +0000
- Subject: [Bug c++/53421] New: __attribute((__may_alias__)) prevents taking address of conversion operator member function
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53421
Bug #: 53421
Summary: __attribute((__may_alias__)) prevents taking address
of conversion operator member function
Classification: Unclassified
Product: gcc
Version: 4.6.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: jeffrey.hellrung@gmail.com
Created attachment 27446
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27446
source file exhibiting the bug when compiled
Compiling attached main.cpp gives the following error:
jeffrey@ubuntu:~/scratch$ g++ -o scratch main.cpp
main.cpp: In function âint main(int, char**)â:
main.cpp:21:6: error: âoperator Y<X>&â is not a member of âXâ
However, no error occurs with any of the following changes:
(a) Removing the __attribute__((__may_alias__)) (commenting in line 3 and
commenting out line 4).
(b) Removing the implementation (line 8) or using a throwing implementation
(line 9) rather than the present implementation (line 10).
(c) Replacing the conversion operator with a regular member function
(commenting out lines 10,21 and commenting in lines 11,22 or 12,22.
Further investigation reveals a possibly related error. One can define the
function out-of-line (commenting in lines 8,16 and commenting out line 10) with
no error, as long as line 15 remains commented out; additionally commenting in
line 15 gives the following error:
jeffrey@ubuntu:~/scratch$ g++ -o scratch main.cpp
main.cpp:16:20: error: no âX::operator Y<X>&()â member function declared in
class âXâ
This error still appears if one uses a throwing implementation (like in (b)) or
replaces the conversion operator with a regular member function (like in (c)),
but no error occurs with the removal of the __attribute__((__may_alias__)) (as
in (a)).