// PR c++/77578
// { dg-do compile }

template <typename T>
class A 
{
};

template <typename T>
struct B
{
};

template <typename T>
struct B <A <T> >
{
  typedef A <T> C;
  typedef typename C::D D;
 
  template <typename U>
  static void
  foo (const D x, const D y)
  {
    U u;
    {
      #pragma omp parallel for 
      for (u.bar().y() = x.y(); u.bar().y() <= y.y(); u.bar().y()++) // { dg-error "expected" }
	;
    }
  }
};