Source: http://www.lsv.fr/~fthire/teaching/2016-2017/programmation-1/1/corrections/libraries/libraries.pdf