// { dg-do compile { target c++11 } }

#define BUG
struct type
{
  type() { }
  type(const type&) { }

private:
  type(type&&);
};

template<typename _Tp>
  struct identity
  {
    typedef _Tp type;
  };

template<typename _Tp>
  inline _Tp&&
  forward(typename identity<_Tp>::type&& __t)
  { return __t; }

struct vec
{
  template<typename _Args>
    void
    bar(_Args&& __args)
#ifdef BUG
    ;
#else
    {
      type(forward<_Args>(__args));
    }
#endif
};

#ifdef BUG
template<typename _Args>
  void
  vec::bar(_Args&& __args)
  {
    type(forward<_Args>(__args));
  }
#endif

int main()
{
  vec v;
  type c;
  v.bar(c);
}
