+2005-11-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21627
+ * pt.c (register_specialization): Update inline flags on clones.y
+
2005-11-03 Andrew Pinski <pinskia@physics.uc.edu>
PR c++/24582
}
else
{
+ tree clone;
/* This situation should occur only if the first
specialization is an implicit instantiation, the
second is an explicit specialization, and the
there were no definition, and vice versa. */
DECL_INITIAL (fn) = NULL_TREE;
duplicate_decls (spec, fn, is_friend);
+ /* The call to duplicate_decls will have applied
+ [temp.expl.spec]:
+
+ An explicit specialization of a function template
+ is inline only if it is explicitly declared to be,
+ and independently of whether its function tempalte
+ is.
+
+ to the primary function; now copy the inline bits to
+ the various clones. */
+ FOR_EACH_CLONE (clone, fn)
+ {
+ DECL_DECLARED_INLINE_P (clone)
+ = DECL_DECLARED_INLINE_P (fn);
+ DECL_INLINE (clone)
+ = DECL_INLINE (fn);
+ }
check_specialization_namespace (fn);
return fn;
--- /dev/null
+// PR c++/21627
+
+template<typename T>
+struct TPL
+{
+ TPL (){}
+ ~TPL (){}
+ void method () {}
+};
+
+template <> TPL<int>::TPL ();
+template <> TPL<int>::~TPL ();
+template <> void TPL<int>::method ();
+
+void Foo ()
+{
+ TPL<int> i;
+ i.method ();
+}
+