public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/51426] New: explicit instantiation declaration without definition
@ 2011-12-05 18:41 mkp76 at wp dot pl
2011-12-05 18:55 ` [Bug c++/51426] " redi at gcc dot gnu.org
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: mkp76 at wp dot pl @ 2011-12-05 18:41 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51426
Bug #: 51426
Summary: explicit instantiation declaration without definition
Classification: Unclassified
Product: gcc
Version: 4.6.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: mkp76@wp.pl
The below code can be compiled (with -std=C++0x option).
--------------------------
template <typename T>
struct A { };
extern template
struct A<int>;
int main()
{
A<int> a;
}
--------------------------
According to C++11 standard (14.7 paragraph 5) it shouldn't
"an explicit instantiation definition shall appear at most once in a program"
I was trying to test 'extern templates' based on Bjarne Stroustrup's page:
http://www2.research.att.com/~bs/C++0xFAQ.html#extern-templates
Regards,
Marcin
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/51426] explicit instantiation declaration without definition
2011-12-05 18:41 [Bug c++/51426] New: explicit instantiation declaration without definition mkp76 at wp dot pl
@ 2011-12-05 18:55 ` redi at gcc dot gnu.org
2011-12-05 23:46 ` paolo.carlini at oracle dot com
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2011-12-05 18:55 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51426
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-12-05 18:54:11 UTC ---
I don't see what that paragraph has to do with it - the explicit instantiation
definition appears zero times, zero is less than one.
The relevant text is 14.7.2 p11
"An entity that is the subject of an explicit instantiation declaration and
that is also used in a way that would otherwise cause an implicit instantiation
(14.7.1) in the translation unit shall be the subject of an explicit
instantiation definition somewhere in the program; otherwise the program is
ill-formed, no diagnostic required."
The program is ill-formed, no diagnostic required.
If you change it so there's something that actually needs a definition you'll
get a linker error:
template <typename T>
struct A { A() { } };
extern template
struct A<int>;
int main()
{
A<int> a;
}
I don't see a bug here
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/51426] explicit instantiation declaration without definition
2011-12-05 18:41 [Bug c++/51426] New: explicit instantiation declaration without definition mkp76 at wp dot pl
2011-12-05 18:55 ` [Bug c++/51426] " redi at gcc dot gnu.org
@ 2011-12-05 23:46 ` paolo.carlini at oracle dot com
2011-12-06 0:33 ` redi at gcc dot gnu.org
2011-12-06 17:49 ` mkp76 at wp dot pl
3 siblings, 0 replies; 5+ messages in thread
From: paolo.carlini at oracle dot com @ 2011-12-05 23:46 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51426
Paolo Carlini <paolo.carlini at oracle dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |INVALID
--- Comment #2 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-12-05 23:46:34 UTC ---
Closing.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/51426] explicit instantiation declaration without definition
2011-12-05 18:41 [Bug c++/51426] New: explicit instantiation declaration without definition mkp76 at wp dot pl
2011-12-05 18:55 ` [Bug c++/51426] " redi at gcc dot gnu.org
2011-12-05 23:46 ` paolo.carlini at oracle dot com
@ 2011-12-06 0:33 ` redi at gcc dot gnu.org
2011-12-06 17:49 ` mkp76 at wp dot pl
3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2011-12-06 0:33 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51426
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-12-06 00:32:48 UTC ---
(In reply to comment #0)
> The below code can be compiled (with -std=C++0x option).
By the way, the program compiles without -std=c++0x, GCC has supported extern
templates since at least GCC 2.95
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/51426] explicit instantiation declaration without definition
2011-12-05 18:41 [Bug c++/51426] New: explicit instantiation declaration without definition mkp76 at wp dot pl
` (2 preceding siblings ...)
2011-12-06 0:33 ` redi at gcc dot gnu.org
@ 2011-12-06 17:49 ` mkp76 at wp dot pl
3 siblings, 0 replies; 5+ messages in thread
From: mkp76 at wp dot pl @ 2011-12-06 17:49 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51426
--- Comment #4 from Marcin Pytel <mkp76 at wp dot pl> 2011-12-06 17:49:06 UTC ---
I did some more testing. I was using eclipse and it adds some compilation
flags. The cause is optimization. When you add empty ctor there's the linker
error. But when you compile with -O2 there's no error. When I added something
to ctor (cout) I got linker error even with O2.
Marcin
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-12-06 17:49 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-12-05 18:41 [Bug c++/51426] New: explicit instantiation declaration without definition mkp76 at wp dot pl
2011-12-05 18:55 ` [Bug c++/51426] " redi at gcc dot gnu.org
2011-12-05 23:46 ` paolo.carlini at oracle dot com
2011-12-06 0:33 ` redi at gcc dot gnu.org
2011-12-06 17:49 ` mkp76 at wp dot pl
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).