ipp to cpp, ale napisany z myślą, aby było mozliwe #include "foo.ipp" w innym pliku ipp lub cpp.
W przypadku templates zawiera definicje metod. Użwa się tak:
foo.cpp: #include "bar.ipp" class Foo {[...]}; [...] Bar<Foo> bar;
spam.cpp: #include "bar.ipp" class Spam {[..]}; [...] Bar<Spam> bar;
W ten sposób foo.cpp i bar cpp dostają własne specjalizacje, nic o sobie nie wiedzą, a nagłówek bar.hpp nie zawiera definicji.
Programista C będzie zaś używał tak:
fancy.cpp: #define SIZE 10 #include "fixed_size_container.ipp" #define SIZE 20 #include "fixed_size_container.ipp"
I dzięki następnym machlojom z makrami dostanie w wyniku tego jakieś dwa typy z 10 i 20 w nazwie, włącznie z definicjami funkcji "dostosowanymi" do SIZE, takie jak np. get_container_element_10(void *container, int index) itp używając jakiś sztuczek z ##.