template<typename T>
struct A {
T c;
};
struct B {
char c;
};
template<typename T, template<typename> typename X>
struct D {
char c;
X<T> x;
};
int main()
{
D<int, A> d;
d.x.c = 10;
// D<int, B> d2; // error, B is not a class template
return 0;
}
// typename in a template template parameter
// g++ xx.cpp -std=c++11
// gcc 5.3.1