pt.c (check_explicit_specialization): Check the namespace after we choose a template.
* pt.c (check_explicit_specialization): Check the namespace after we choose a template. From-SVN: r230271
This commit is contained in:
parent
633ce97157
commit
84edfc8aef
@ -1,3 +1,8 @@
|
||||
2015-11-12 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* pt.c (check_explicit_specialization): Check the namespace after
|
||||
we choose a template.
|
||||
|
||||
2015-11-11 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* decl.c (duplicate_decls): When combining typedefs, remove the
|
||||
|
16
gcc/cp/pt.c
16
gcc/cp/pt.c
@ -2800,14 +2800,6 @@ check_explicit_specialization (tree declarator,
|
||||
error ("%qD is not a template function", dname);
|
||||
fns = error_mark_node;
|
||||
}
|
||||
else
|
||||
{
|
||||
tree fn = OVL_CURRENT (fns);
|
||||
if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
|
||||
CP_DECL_CONTEXT (fn)))
|
||||
error ("%qD is not declared in %qD",
|
||||
decl, current_namespace);
|
||||
}
|
||||
}
|
||||
|
||||
declarator = lookup_template_function (fns, NULL_TREE);
|
||||
@ -2941,6 +2933,14 @@ check_explicit_specialization (tree declarator,
|
||||
return error_mark_node;
|
||||
else
|
||||
{
|
||||
if (!ctype && !was_template_id
|
||||
&& (specialization || member_specialization
|
||||
|| explicit_instantiation)
|
||||
&& !is_associated_namespace (CP_DECL_CONTEXT (decl),
|
||||
CP_DECL_CONTEXT (tmpl)))
|
||||
error ("%qD is not declared in %qD",
|
||||
tmpl, current_namespace);
|
||||
|
||||
tree gen_tmpl = most_general_template (tmpl);
|
||||
|
||||
if (explicit_instantiation)
|
||||
|
7
gcc/testsuite/g++.dg/template/explicit-instantiation4.C
Normal file
7
gcc/testsuite/g++.dg/template/explicit-instantiation4.C
Normal file
@ -0,0 +1,7 @@
|
||||
void f();
|
||||
|
||||
namespace A {
|
||||
template <class T> void f(T) { }
|
||||
using ::f;
|
||||
template void f(int);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user