#include <iostream>
template<typename X>
struct S
{
typedef int func_t(X value);
template<typename F>
struct Extract;
template<typename F>
struct Extract<int(F)>
{
typedef F type;
};
typedef typename Extract<func_t>::type xtype;
};
void x() { std::cout << "x" << std::endl; }
int main()
{
S<void() volatile>::xtype z = &x;
z();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgWD4Kc3RydWN0IFMKewogICAgdHlwZWRlZiBpbnQgZnVuY190KFggdmFsdWUpOwogICAgCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGPgogICAgc3RydWN0IEV4dHJhY3Q7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGPgogICAgc3RydWN0IEV4dHJhY3Q8aW50KEYpPgogICAgewogICAgICAgIHR5cGVkZWYgRiB0eXBlOwogICAgfTsgICAgCiAgICB0eXBlZGVmIHR5cGVuYW1lIEV4dHJhY3Q8ZnVuY190Pjo6dHlwZSB4dHlwZTsKfTsKCnZvaWQgeCgpIHsgc3RkOjpjb3V0IDw8ICJ4IiA8PCBzdGQ6OmVuZGw7IH0KCmludCBtYWluKCkKewogICAgUzx2b2lkKCkgdm9sYXRpbGU+Ojp4dHlwZSB6ID0gJng7CiAgICB6KCk7Cn0=