#include <iostream>
#include <array>
template<class T>
struct A{
constexpr static int value=0;
};
template<template<typename>class T,typename...Args>
struct A<T<Args...>>
{
constexpr static int value=1;
};
template<template<typename>class T,typename...Args>
struct A<T<Args...> const>
{//const container used for type of return arguments
constexpr static int value=2;
};
int main()
{
using Type=const std::array<int,10>;
std::cout<<A<Type>::value;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpzdHJ1Y3QgQXsKICAgIGNvbnN0ZXhwciBzdGF0aWMgaW50IHZhbHVlPTA7Cn07Cgp0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT5jbGFzcyBULHR5cGVuYW1lLi4uQXJncz4Kc3RydWN0IEE8VDxBcmdzLi4uPj4KewogICAgY29uc3RleHByIHN0YXRpYyBpbnQgdmFsdWU9MTsKfTsKCnRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPmNsYXNzIFQsdHlwZW5hbWUuLi5BcmdzPgpzdHJ1Y3QgQTxUPEFyZ3MuLi4+IGNvbnN0Pgp7Ly9jb25zdCBjb250YWluZXIgdXNlZCBmb3IgdHlwZSBvZiAgcmV0dXJuIGFyZ3VtZW50cwogICAgY29uc3RleHByIHN0YXRpYyBpbnQgdmFsdWU9MjsKfTsKCmludCBtYWluKCkKewogICAgdXNpbmcgVHlwZT1jb25zdCBzdGQ6OmFycmF5PGludCwxMD47CiAgICBzdGQ6OmNvdXQ8PEE8VHlwZT46OnZhbHVlOwp9Cg==