Curiously recurring template pattern and visitor implementation in C++/Java

The curiously recurring template pattern (CRTP) is a C++ programming idiom that powers the static polymorphism, the policy-based design and many other metaprogramming techniques. Here we try to apply CRTP to Java, implementing the visitor pattern in a similar way to a C++ implementation. We compare the behavior between the implementation, and explain how the differences in behavior could be understood in terms of the differences between C++ templates and Java generics.