#include <iostream>
using namespace std;
typedef struct {
unsigned v;
} GPIO_typedef;
#define PORTA ((GPIO_typedef*)0x04)
#define PORTB ((GPIO_typedef*)0x08)
#define MKSTR2(TOSTR) #TOSTR
#define MKSTR(TOSTR) MKSTR2(TOSTR)[19]
template< char ch >
inline
unsigned getPortFlag()
{
//static_assert(false, "not implemented for this target");
return 0;
}
template< >
inline
unsigned getPortFlag< MKSTR(PORTA) >()
{
static_assert('4' == MKSTR(PORTA), "port A?");
return 1;
}
int main() {
// your code goes here
cout<<"Port A flag: "<<getPortFlag<MKSTR(PORTA)>()<<"\n";
cout<<"Port B flag: "<<getPortFlag<MKSTR(PORTB)>()<<"\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBzdHJ1Y3QgewoJdW5zaWduZWQgdjsKfSBHUElPX3R5cGVkZWY7CgoKI2RlZmluZSBQT1JUQSAgKChHUElPX3R5cGVkZWYqKTB4MDQpCiNkZWZpbmUgUE9SVEIgICgoR1BJT190eXBlZGVmKikweDA4KQoKCiNkZWZpbmUgTUtTVFIyKFRPU1RSKSAjVE9TVFIgCiNkZWZpbmUgTUtTVFIoVE9TVFIpIE1LU1RSMihUT1NUUilbMTldCgp0ZW1wbGF0ZTwgY2hhciBjaCA+CmlubGluZQp1bnNpZ25lZCBnZXRQb3J0RmxhZygpCnsKCS8vc3RhdGljX2Fzc2VydChmYWxzZSwgIm5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyB0YXJnZXQiKTsKCXJldHVybiAwOwp9Cgp0ZW1wbGF0ZTwgID4KaW5saW5lCnVuc2lnbmVkIGdldFBvcnRGbGFnPCBNS1NUUihQT1JUQSkgPigpCnsKCXN0YXRpY19hc3NlcnQoJzQnID09IE1LU1RSKFBPUlRBKSwgInBvcnQgQT8iKTsKCXJldHVybiAxOwp9CgoKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJCgljb3V0PDwiUG9ydCBBIGZsYWc6ICI8PGdldFBvcnRGbGFnPE1LU1RSKFBPUlRBKT4oKTw8IlxuIjsKCWNvdXQ8PCJQb3J0IEIgZmxhZzogIjw8Z2V0UG9ydEZsYWc8TUtTVFIoUE9SVEIpPigpPDwiXG4iOwoJcmV0dXJuIDA7Cn0KCgo=