#include <iostream>
#include <iterator>
#include <string>
#include <vector>

struct PasswordVerifier {
	bool operator()(const std::string &password) {
		std::cout << "password: " << password << std::endl;
		return false;
	}
};

struct IdCardVerifier {
	bool operator()(const std::vector<int> &id_value) {
		std::cout << "id_value: ";
		std::copy(id_value.begin(), id_value.end(), std::ostream_iterator<int>(std::cout, ","));
		return false;
	}
};

template<class Verifier, class... Args>
bool verify(Args&&... args) {
	return Verifier()(std::forward<Args>(args)...);
}

int main() {
	verify<PasswordVerifier>("this_is_my_password");
	verify<IdCardVerifier>(std::vector<int>({0, 1, 2, 3}));
	return 0;
}
