curiously recurring template patterns