// Origin: PR c++/42634
// { dg-options "-g" }
// { dg-do compile { target c++11 } }

template<typename T> T declval();

template<typename T, typename... Args> struct is_constructible {
    template<typename T1, typename... Args1> static decltype(T1(declval<Args1>()...), char()) test();
    static const bool value = sizeof(test<T, Args...>()) == 1;
};
template<bool> struct enable_if {
        typedef void type;
};
template<class T1, class T2> struct pair {
    template<class U2,
             class = typename enable_if<is_constructible<T2,U2&&>::value>::type
             >
    pair(const T1&, U2&&) { }
};
struct string {
  string() : p(0) {}
  char* p;
};

struct Foo {
  string s;
  int i;
};

void f()
{
  pair<int, Foo>(1, Foo());
}

