re PR c++/23896 (boost::tie() = std::pair doesn't compile)
PR c++/23896 * pt.c (tsubst_aggr_type): Make sure skip_evaluation is false when processing template arguments. PR c++/23896 * g++.dg/template/static17.C: New test. From-SVN: r104336
This commit is contained in:
parent
bba35acfce
commit
3489ea0cb1
@ -1,5 +1,9 @@
|
||||
2005-09-15 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/23896
|
||||
* pt.c (tsubst_aggr_type): Make sure skip_evaluation is false when
|
||||
processing template arguments.
|
||||
|
||||
* pt.c (check_explicit_instantiation_namespace): Fix typo.
|
||||
|
||||
PR c++/13140
|
||||
|
16
gcc/cp/pt.c
16
gcc/cp/pt.c
@ -6069,6 +6069,11 @@ tsubst_aggr_type (tree t,
|
||||
tree argvec;
|
||||
tree context;
|
||||
tree r;
|
||||
bool saved_skip_evaluation;
|
||||
|
||||
/* In "sizeof(X<I>)" we need to evaluate "I". */
|
||||
saved_skip_evaluation = skip_evaluation;
|
||||
skip_evaluation = false;
|
||||
|
||||
/* First, determine the context for the type we are looking
|
||||
up. */
|
||||
@ -6089,12 +6094,17 @@ tsubst_aggr_type (tree t,
|
||||
argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
|
||||
complain, in_decl);
|
||||
if (argvec == error_mark_node)
|
||||
return error_mark_node;
|
||||
|
||||
r = error_mark_node;
|
||||
else
|
||||
{
|
||||
r = lookup_template_class (t, argvec, in_decl, context,
|
||||
entering_scope, complain);
|
||||
r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
|
||||
}
|
||||
|
||||
return cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
|
||||
skip_evaluation = saved_skip_evaluation;
|
||||
|
||||
return r;
|
||||
}
|
||||
else
|
||||
/* This is not a template type, so there's nothing to do. */
|
||||
|
@ -1,3 +1,8 @@
|
||||
2005-09-15 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/23896
|
||||
* g++.dg/template/static17.C: New test.
|
||||
|
||||
2005-09-15 Joseph S. Myers <joseph@codesourcery.com>
|
||||
|
||||
PR c++/23139
|
||||
|
13
gcc/testsuite/g++.dg/template/static17.C
Normal file
13
gcc/testsuite/g++.dg/template/static17.C
Normal file
@ -0,0 +1,13 @@
|
||||
// PR c++/23896
|
||||
|
||||
template <int> struct X {};
|
||||
|
||||
template <typename T> struct length {
|
||||
static const int value = 2;
|
||||
};
|
||||
|
||||
template <typename T> void foo () {
|
||||
sizeof(X<length<T>::value>);
|
||||
}
|
||||
|
||||
template void foo<int>();
|
Loading…
Reference in New Issue
Block a user