#include <iostream>
template<typename T>
struct S{
void hi(){
std::cout << "base" << std::endl;
}
};
template<typename T, std::size_t I>
struct S<T[I]>{
void hi(){
std::cout << "specialized" << std::endl;
}
};
int main() {
S<int>{}.hi();
S<int[4]>{}.hi();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBTewogICAgdm9pZCBoaSgpewogICAgCXN0ZDo6Y291dCA8PCAiYmFzZSIgPDwgc3RkOjplbmRsOwogICAgfQp9Owp0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBJPgpzdHJ1Y3QgUzxUW0ldPnsKICAgIHZvaWQgaGkoKXsKICAgIAlzdGQ6OmNvdXQgPDwgInNwZWNpYWxpemVkIiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKCVM8aW50Pnt9LmhpKCk7CglTPGludFs0XT57fS5oaSgpOwoJcmV0dXJuIDA7Cn0=