// PR c++/52830
// { dg-do compile { target c++11 } }
// { dg-additional-options "-fchecking" }

template<bool b> struct eif { typedef void type; };
template<>       struct eif<false> {};

template<class A, class B> struct same
{
  static constexpr bool value = false;
};
template<class A>
struct same<A, A>
{
  static constexpr bool value = true;
};


struct foo {
  template<class T>
  void func(T && a,
            typename eif<same<decltype(a), int&&>::value>::type * = 0);
};

template<class T>
void
foo::
func(T && a,
     typename eif<same<decltype(a), int&&>::value>::type * )
{
}

void do_stuff()
{
  foo f;
  f.func(12);
}
