#include <iostream>
using namespace std;


struct Pin {
  unsigned int const mask;
  Pin(unsigned int m) : mask (m) {};
  unsigned int asInput(void) {
    return mask;
  }
};


void write_config (unsigned int v) {
  cout << v <<endl;
}

template<typename It>
void setPins(It start, It end, unsigned int (Pin::*fn)(void) ) {
  unsigned int cfg = 0; // identity for bitwise or
  for (; start != end; ++start) {
    cfg |= ((*start).*fn)(); // need to test that, wait a minute
  }
  write_config(cfg);
};
int main() {
	Pin pins[] = {1, 2, 4};
    setPins(pins, pins + 3, &Pin::asInput);
	return 0;
}