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:
parent
eb5c336b57
commit
54ca6baf7a
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
Loading…
Reference in New Issue