re PR c++/55058 (Unexpected invalid type conversion error)

PR c++/55058
	* pt.c (tsubst): Keep the quals when looking through a typedef.

From-SVN: r194289
This commit is contained in:
Jason Merrill 2012-12-07 00:13:22 -05:00 committed by Jason Merrill
parent eb5c336b57
commit 54ca6baf7a
3 changed files with 31 additions and 2 deletions

View File

@ -1,5 +1,8 @@
2012-12-06 Jason Merrill <jason@redhat.com>
PR c++/55058
* pt.c (tsubst): Keep the quals when looking through a typedef.
PR c++/55249
* tree.c (build_vec_init_elt): Use the type of the initializer.

View File

@ -10908,8 +10908,13 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
return r;
}
else
/* We don't have an instantiation yet, so drop the typedef. */
t = DECL_ORIGINAL_TYPE (decl);
{
/* We don't have an instantiation yet, so drop the typedef. */
int quals = cp_type_quals (t);
t = DECL_ORIGINAL_TYPE (decl);
t = cp_build_qualified_type_real (t, quals,
complain | tf_ignore_bad_quals);
}
}
if (type

View File

@ -0,0 +1,21 @@
// PR c++/55058
template <typename T>
struct A { };
template <typename T>
struct B {
B(const A<T> T::* p);
typedef A<T> D;
};
template <typename T>
B<T>::B(const D T::* p) { }
struct C {
C() : e() {};
const A<C> e;
};
B<C> g(&C::e);