re PR c++/65719 (Link error with constexpr variable template)

PR c++/65719
	* pt.c (tsubst_decl) [VAR_DECL]: Mark namespace-scope
	variables as DECL_NOT_REALLY_EXTERN.

From-SVN: r224442
This commit is contained in:
Jason Merrill 2015-06-12 14:16:22 -04:00 committed by Jason Merrill
parent df649a1c7e
commit 350562a75d
3 changed files with 22 additions and 2 deletions

View file

@ -1,3 +1,9 @@
2015-06-12 Jason Merrill <jason@redhat.com>
PR c++/65719
* pt.c (tsubst_decl) [VAR_DECL]: Mark namespace-scope
variables as DECL_NOT_REALLY_EXTERN.
2015-06-11 Jason Merrill <jason@redhat.com>
PR c++/66445

View file

@ -11306,8 +11306,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
{
/* T is a static data member or namespace-scope entity.
We have to substitute into namespace-scope variables
(even though such entities are never templates) because
of cases like:
(not just variable templates) because of cases like:
template <class T> void f() { extern T t; }
@ -11468,6 +11467,8 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
initializer is present. We mimic the non-template
processing here. */
DECL_EXTERNAL (r) = 1;
if (DECL_NAMESPACE_SCOPE_P (t))
DECL_NOT_REALLY_EXTERN (r) = 1;
DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
SET_DECL_IMPLICIT_INSTANTIATION (r);

View file

@ -0,0 +1,13 @@
// PR c++/65719
// { dg-do link { target c++14 } }
struct FunctionObject {
void operator()() const { }
};
template <typename T>
constexpr FunctionObject f{};
int main() {
f<int>();
}