Now, namespace issues play an important role and are likely to screw us up:
- We want to provide transparent support for different types, such as double, TBCI::cplx<>, std::complex<>
- Therefore the functions acting on this types should be defined in the same namespace, otherwise the template won't work in general
- We can either accept the namespaces the functions are defined in according to the standards (like std::fabs(double), std::conj(std::complex<double>), or reexport them to our own namespace.
- The latter option has the disadvantage of tieing code to our library. It needs to be converted.
- So, we'll export our functions to the namespaces of the ANSI standard.
- Compiler and library bugs (incomplete namespace support) make a mess out of any concept.
- We use CSTD__/MATH__ (for the libc functions that should live in the std:: namespace), STD__ (for C++ functions that should be in std::), CPLX__ (for the complex class in std::) and TBCI__ (for our own extensions)