#include <iostream>
#include <type_traits>
using namespace std;
struct arch32 {};
struct arch64 {};
template<typename Arch>
struct header_traits;
template<>
struct header_traits<arch32>
{
using VirtualAddress_type = uint32_t;
};
template<>
struct header_traits<arch64>
{
using VirtualAddress_type = uint64_t;
};
/// skiped more lines
template<typename Arch>
using VirtualAddress_t = typename header_traits<Arch>::VirtualAddress_type;
int main() {
// your code goes here
VirtualAddress_t<arch32> t;
static_assert(is_same<VirtualAddress_t<arch32>, uint32_t>::value, "not same");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgYXJjaDMyIHt9OwpzdHJ1Y3QgYXJjaDY0IHt9OwoKdGVtcGxhdGU8dHlwZW5hbWUgQXJjaD4Kc3RydWN0IGhlYWRlcl90cmFpdHM7Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBoZWFkZXJfdHJhaXRzPGFyY2gzMj4KewogICAgdXNpbmcgVmlydHVhbEFkZHJlc3NfdHlwZSA9IHVpbnQzMl90Owp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgaGVhZGVyX3RyYWl0czxhcmNoNjQ+CnsKICAgIHVzaW5nIFZpcnR1YWxBZGRyZXNzX3R5cGUgPSB1aW50NjRfdDsKfTsKCi8vLyBza2lwZWQgbW9yZSBsaW5lcwoKdGVtcGxhdGU8dHlwZW5hbWUgQXJjaD4KdXNpbmcgVmlydHVhbEFkZHJlc3NfdCA9IHR5cGVuYW1lIGhlYWRlcl90cmFpdHM8QXJjaD46OlZpcnR1YWxBZGRyZXNzX3R5cGU7CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCQoJVmlydHVhbEFkZHJlc3NfdDxhcmNoMzI+IHQ7CglzdGF0aWNfYXNzZXJ0KGlzX3NhbWU8VmlydHVhbEFkZHJlc3NfdDxhcmNoMzI+LCB1aW50MzJfdD46OnZhbHVlLCAibm90IHNhbWUiKTsKCQoJcmV0dXJuIDA7Cn0=