Commit 7a20d689 by Jason Merrill Committed by Jason Merrill

re PR c++/33239 (internal compiler error in instantiate_class_template, at cp/pt.c:5666)

        PR c++/33239
        * pt.c (resolve_typename_type): Don't look things up in the original
        template if it would mean losing template arguments.

From-SVN: r128725
parent 7b7bdf67
2007-09-24 Jason Merrill <jason@redhat.com>
PR c++/33239
* pt.c (resolve_typename_type): Don't look things up in the original
template if it would mean losing template arguments.
2007-09-24 Jakub Jelinek <jakub@redhat.com>
PR c++/33506
......
......@@ -15732,9 +15732,16 @@ resolve_typename_type (tree type, bool only_current_p)
to look inside it. */
if (only_current_p && !currently_open_class (scope))
return type;
/* If SCOPE is a partial instantiation, it will not have a valid
TYPE_FIELDS list, so use the original template. */
scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
/* If SCOPE isn't the template itself, it will not have a valid
TYPE_FIELDS list. */
if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
/* scope is either the template itself or a compatible instantiation
like X<T>, so look up the name in the original template. */
scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
else
/* scope is a partial instantiation, so we can't do the lookup or we
will lose the template arguments. */
return type;
/* Enter the SCOPE so that name lookup will be resolved as if we
were in the class definition. In particular, SCOPE will no
longer be considered a dependent type. */
......
// PR c++/33239
struct null_type;
template<typename T1, typename T2>
struct tuple_impl
{
template<typename U>
struct append
{
typedef tuple_impl<U, null_type> type;
};
int data;
};
template<typename T1>
class tuple
: public tuple_impl<T1, null_type>::template append<T1>::type
{
using tuple_impl<T1, null_type>::template append<T1>::type::data;
};
tuple<int> my_tuple;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment