#include <functional>
using namespace std;
/* a function template */
template <typename A, typename B>
A f(B) { return A(); }
/* a class template */
template <typename A, typename B>
class X {};
template <typename A, typename B>
class Y
{
/** All these constructors fail to compile **/
Y(X<A,B> = X<A,B>())
//Y(A (*arg)(B) = f<A, B>)
//Y(std::function<A(B)> arg = f<A, B>)
{ }
};
int main()
{ return 0; }
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovKiBhIGZ1bmN0aW9uIHRlbXBsYXRlICovCnRlbXBsYXRlIDx0eXBlbmFtZSBBLCB0eXBlbmFtZSBCPgpBIGYoQikgeyByZXR1cm4gQSgpOyB9CgovKiBhIGNsYXNzIHRlbXBsYXRlICovCnRlbXBsYXRlIDx0eXBlbmFtZSBBLCB0eXBlbmFtZSBCPgpjbGFzcyBYIHt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIEEsIHR5cGVuYW1lIEI+CmNsYXNzIFkKewogIC8qKiBBbGwgdGhlc2UgY29uc3RydWN0b3JzIGZhaWwgdG8gY29tcGlsZSAqKi8KICAKICBZKFg8QSxCPiA9IFg8QSxCPigpKQogIC8vWShBICgqYXJnKShCKSA9IGY8QSwgQj4pCiAgLy9ZKHN0ZDo6ZnVuY3Rpb248QShCKT4gYXJnID0gZjxBLCBCPikKICB7IH0KfTsKCmludCBtYWluKCkKeyByZXR1cm4gMDsgfQ==