/*
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
template <typename... Types>
struct Tuple {};

Tuple<Tuple<int>> x;

typedef decltype(nullptr) nullptr_t;
template <nullptr_t X>
struct NullPtrTemplate {};

NullPtrTemplate<nullptr> x1;

template <int x>
struct IntTemplate {};

template <char x>
struct CharTemplate {};
template <long x>
struct LongTemplate {};

IntTemplate<0> x2;
CharTemplate<'c'> x3;
LongTemplate<0x1234567890L> x4;

template <const int *x>
struct X {};
int x5[42];

struct Y {};
template <const Y &b>
struct Z {};
Y y;

template <int (&pa)[5]>
struct W {};
int b[5];

void f(int);
template <void (*pf)(int)>
struct A {};

X<x5> xi;
Z<y> z;
W<b> w;
A<&f> a;