#include <iostream>
#include <vector>
#include <stdint.h>

constexpr uint64_t do_the_hash(const char* input, uint64_t value_so_far) {
    return *input ? do_the_hash(input + 1, (value_so_far << 8) | *input) : value_so_far;
}


constexpr uint64_t hash_metafunction(const char* input) {
    return do_the_hash(input, 0);
}

int main()
{
    std::cout << std::hex;
    std::cout << hash_metafunction("a") << std::endl;
    std::cout << hash_metafunction("ab") << std::endl;
    std::cout << hash_metafunction("abc") << std::endl;
}
