. . , .
template<template<class...>class Z>
struct ztemplate{
template<class...Ts>
using apply=Z<Ts...>;
};
template<class Z, class...Ts>
using apply=typename Z::template apply<Ts...>;
using zapply=ztemplate<apply>;
raw template s, ztemplate s.
template<class T>
struct KeyType {};
using zKeyType=ztemplate<KeyType>;
++ . , (, ztemplate), SFINAE psuedo-concept .
ztemplate - , . .
, ( ztemplate ). .
X<Blah> do apply<zX, Blah>. , apply , .
apply<zapply, zX, Blah> apply<zapply, zapply, zX, Blah> .. , apply<zX, Blah>.