re PR c++/24275 (Previously accepted code fails with 4.0.2)
PR c++/24275 * pt.c (instantiate_decl): Instantiate the initializer of a static data member in the namespace containing the class containing the static data member. PR c++/24275 * g++.dg/template/static19.C: New test. From-SVN: r105173
This commit is contained in:
parent
f0d60e2210
commit
27a725e293
|
@ -11558,12 +11558,15 @@ instantiate_decl (tree d, int defer_ok,
|
||||||
&& !DECL_INITIAL (d)
|
&& !DECL_INITIAL (d)
|
||||||
&& DECL_INITIAL (code_pattern))
|
&& DECL_INITIAL (code_pattern))
|
||||||
{
|
{
|
||||||
|
tree ns = decl_namespace_context (d);
|
||||||
|
push_nested_namespace (ns);
|
||||||
push_nested_class (DECL_CONTEXT (d));
|
push_nested_class (DECL_CONTEXT (d));
|
||||||
DECL_INITIAL (d)
|
DECL_INITIAL (d)
|
||||||
= tsubst_expr (DECL_INITIAL (code_pattern),
|
= tsubst_expr (DECL_INITIAL (code_pattern),
|
||||||
args,
|
args,
|
||||||
tf_error | tf_warning, NULL_TREE);
|
tf_error | tf_warning, NULL_TREE);
|
||||||
pop_nested_class ();
|
pop_nested_class ();
|
||||||
|
pop_nested_namespace (ns);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We restore the source position here because it's used by
|
/* We restore the source position here because it's used by
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
// PR c++/24275
|
||||||
|
|
||||||
|
template <bool val> struct bool_var {
|
||||||
|
static const bool value = val;
|
||||||
|
};
|
||||||
|
namespace is_inc_ {
|
||||||
|
struct any {
|
||||||
|
template <class T> any(T const&);
|
||||||
|
};
|
||||||
|
int operator++(any const&);
|
||||||
|
template <class T> struct impl {
|
||||||
|
static T &x;
|
||||||
|
static const bool value = sizeof(++x) == 1;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
template<typename T> struct is_incr : bool_var< is_inc_::impl<T>::value> {};
|
||||||
|
struct not_incr{};
|
||||||
|
typedef int sa1[ is_incr<not_incr>::value ? -1 : 1];
|
Loading…
Reference in New Issue