template <typename A, typename B>
class foo { };
template <typename T>
struct feature_type {};
template <typename A, typename B>
struct feature_type<foo<A,B>> {
typedef A type1;
typedef A type2;
};
int main(int argc, const char* argv[])
{
typename feature_type<foo<int,char>>::type1 x;
typename feature_type<foo<int,char>>::type2 y;
return 0;
}
dGVtcGxhdGUgPHR5cGVuYW1lIEEsIHR5cGVuYW1lIEI+CmNsYXNzIGZvbyB7IH07CiAKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBmZWF0dXJlX3R5cGUge307CiAKdGVtcGxhdGUgPHR5cGVuYW1lIEEsIHR5cGVuYW1lIEI+CnN0cnVjdCBmZWF0dXJlX3R5cGU8Zm9vPEEsQj4+IHsKICB0eXBlZGVmIEEgdHlwZTE7CiAgdHlwZWRlZiBBIHR5cGUyOwp9OwogCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCnsKICB0eXBlbmFtZSBmZWF0dXJlX3R5cGU8Zm9vPGludCxjaGFyPj46OnR5cGUxIHg7CiAgdHlwZW5hbWUgZmVhdHVyZV90eXBlPGZvbzxpbnQsY2hhcj4+Ojp0eXBlMiB5OwogIHJldHVybiAwOwp9