+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
{
/* 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; }
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);
--- /dev/null
+// PR c++/65719
+// { dg-do link { target c++14 } }
+
+struct FunctionObject {
+ void operator()() const { }
+};
+
+template <typename T>
+constexpr FunctionObject f{};
+
+int main() {
+ f<int>();
+}