#include <iostream>
namespace MATH {
template <std::size_t M, std::size_t N, class T>
class Matrix
{
};
void invert(Matrix<2, 2, double>& m)
{
std::cout << "DIM 2 : MATH version (use of the determinant)" << std::endl;
}
void invert(Matrix<3, 3, double>& m)
{
std::cout << "DIM 3 : MATH version (use of the determinant)" << std::endl;
}
}
namespace GEOM {
//template <std::size_t N>
//using Matrix = MATH::Matrix<N, N, double>;// orthonormal set of vectors
template <std::size_t N>
class Matrix : public MATH::Matrix<N, N, double> {};// orthonormal set of vectors
template <std::size_t N>
void invert(Matrix<N>& m)
{
std::cout << "DIM " << N << " : GEOM version (use of the transpose)" << std::endl;
}
void geom_foo_purpose(Matrix<3>& m)
{
invert(m);
}
}
int main(int argc, char **argv)
{
GEOM::Matrix<3> m;
GEOM::geom_foo_purpose(m);
MATH::invert(m);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKCm5hbWVzcGFjZSBNQVRIIHsKCgp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTSwgc3RkOjpzaXplX3QgTiwgY2xhc3MgVD4KY2xhc3MgTWF0cml4CnsKCn07Cgp2b2lkIGludmVydChNYXRyaXg8MiwgMiwgZG91YmxlPiYgbSkKewogICAgc3RkOjpjb3V0IDw8ICJESU0gMiA6IE1BVEggdmVyc2lvbiAodXNlIG9mIHRoZSBkZXRlcm1pbmFudCkiIDw8IHN0ZDo6ZW5kbDsKfQoKdm9pZCBpbnZlcnQoTWF0cml4PDMsIDMsIGRvdWJsZT4mIG0pCnsKICAgIHN0ZDo6Y291dCA8PCAiRElNIDMgOiBNQVRIIHZlcnNpb24gKHVzZSBvZiB0aGUgZGV0ZXJtaW5hbnQpIiA8PCBzdGQ6OmVuZGw7Cn0KCgp9CgoKbmFtZXNwYWNlIEdFT00gewoKCi8vdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci8vdXNpbmcgTWF0cml4ID0gTUFUSDo6TWF0cml4PE4sIE4sIGRvdWJsZT47Ly8gb3J0aG9ub3JtYWwgc2V0IG9mIHZlY3RvcnMKdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+CmNsYXNzIE1hdHJpeCA6IHB1YmxpYyBNQVRIOjpNYXRyaXg8TiwgTiwgZG91YmxlPiB7fTsvLyBvcnRob25vcm1hbCBzZXQgb2YgdmVjdG9ycwoKCnRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgp2b2lkIGludmVydChNYXRyaXg8Tj4mIG0pCnsKICAgIHN0ZDo6Y291dCA8PCAiRElNICIgPDwgTiA8PCAiIDogR0VPTSB2ZXJzaW9uICh1c2Ugb2YgdGhlIHRyYW5zcG9zZSkiIDw8IHN0ZDo6ZW5kbDsKfQoKdm9pZCBnZW9tX2Zvb19wdXJwb3NlKE1hdHJpeDwzPiYgbSkKewogICAgaW52ZXJ0KG0pOwp9CgoKfQoKCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewogICAgR0VPTTo6TWF0cml4PDM+IG07CiAgICBHRU9NOjpnZW9tX2Zvb19wdXJwb3NlKG0pOwogICAgTUFUSDo6aW52ZXJ0KG0pOwogICAgCiAgICByZXR1cm4gMDsKfQ==