day%.out: out/types.o day%.cpp
	g++-10 -std=c++2a $(flags) $(@:out=cpp) out/types.o -o $@

day%.cpp:
	cp template.cpp $@

out/types.o: types.hpp types.cpp
	mkdir -p out/
	g++-10 -std=c++2a $(flags) -c types.cpp -o $@

.PHONY: clean
clean:
	rm out/* day*.out day*.output