template<typename T> struct A
{
template<T> int foo(); template<template<T> class> int bar(); template<T> struct X; };
A<char> a1;
A<double> a2;
template<typename T> struct B
{
template<double> int foo(); template<template<double> class> int bar(); template<double> struct X; };
template<void> int foo(); template<template<void> class> int bar(); template<void> struct X;
template<typename T> struct C
{
template<T> int foo(); };
template<typename T> int baz(T) { C<T> c; }
void foobar()
{
baz(1.2); }