Preprocessor metaprogramming

Part of VLFeat code uses a simple form of preprocessor metaprogramming. This technique is used, similarly to C++ templates, to instantiate multiple version of a given algorithm for different data types (e.g. float and double).

In most cases preprocessor metaprogramming is invisible to the library user, as it is used only internally.