template<typename> struct vector;
template<typename T = int, typename> struct X3t; template<typename T = int, typename> using A3t = int; template<int V = 0, int> struct X3nt; template<int V = 0, int> using A3nt = int; template<template<class> class M = vector, template<class> class> struct X3tt; template<template<class> class M = vector, template<class> class> using A3tt = int;
template<typename T = int, typename ...Types> struct X2t;
template<typename T = int, typename ...Types> using A2t = X2t<T, Types...>;
template<int V = 0, int ...Values> struct X2nt;
template<int V = 0, int ...Values> using A2nt = X2nt<V, Values...>;
template<template<class> class M = vector, template<class> class... Metas>
struct X2tt;
template<template<class> class M = vector, template<class> class... Metas>
using A2tt = X2tt<M, Metas...>;
template<typename ...Types, int After, int After2>
struct X0t;
X0t<int> pr9789();
template<typename ...Types, int After>
using A0t = int;
template<int ...Values, int After>
struct X0nt;
template<int ...Values, int After>
using A0nt = int;
template<template<typename> class ...Templates, int After>
struct X0tt;
template<template<typename> class ...Templates, int After>
using A0tt = int;
template<typename... Types> struct X1t;
template<typename ...Types, typename T> struct X1t<T, Types...> { };
template<int... Values> struct X1nt;
template<int ...Values, int V> struct X1nt<V, Values...> { };
template<template<int> class... Meta> struct X1tt;
template<template<int> class... Meta, template<int> class M>
struct X1tt<M, Meta...> { };
template<typename ...Types, typename T>
void f1t(X1t<T, Types...>);
template<int ...Values, int V>
void f1nt(X1nt<V, Values...>);
template<template<int> class... Meta, template<int> class M>
void f1tt(X1tt<M, Meta...>);
namespace DefaultTemplateArgsInFunction {
template<typename T = int, typename U> T &f0(U) { T *x = 0; return *x; }
void test_f0() {
int &ir0 = f0(3.14159);
int &ir1 = f0<int>(3.14159);
float &fr0 = f0<float>(3.14159);
}
template<> int &f0(int*);
template int &f0(double&);
}