else if (! expr || ! real_lvalue_p (expr))
lvalue = 0;
- related = (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from)
+ related = (comptypes (TYPE_MAIN_VARIANT (to),
+ TYPE_MAIN_VARIANT (from), 1)
|| (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
&& DERIVED_FROM_P (to, from)));
{
conv = build1 (IDENTITY_CONV, from, expr);
- if (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from))
+ if (comptypes (TYPE_MAIN_VARIANT (to),
+ TYPE_MAIN_VARIANT (from), 1))
conv = build_conv (REF_BIND, rto, conv);
else
{
--- /dev/null
+struct S
+{
+ template <class T>
+ void f(T (&i)[7])
+ {}
+
+ void g()
+ {
+ int i[] = {1, 2, 3, 4, 5, 6, 7};
+ f(i);
+ int j[7];
+ f(j);
+ }
+};
+
+struct foo {
+ template <typename T, int N>
+ static T* array_end(T(&array)[N]) { return &array[N]; }
+};
+
+struct X
+{
+ template <class T1>
+ void f(const T1&) {}
+};
+
+main(int ac, char* av[]) {
+ S s;
+ s.g();
+ int i[] = {1,2,3,4,5};
+ int* e = foo::array_end(i);
+ X x;
+ x.f("hello");
+}
+