jeremyong/klein

MSVC2019: Code in documentation does not compile...

DJuego opened this issue · 1 comments

The code is:

#include <klein/public/klein/klein.hpp>

int main()
{
	kln::plane p{ 1, 0, 0, 3 };
	kln::point P{ 2, 0, 1 };
	kln::point P_on_p{ (p | P) * p }; // Equivalent to (P|p) * p
}

You get it in Visual Studio 2019 (Windows 10 x64):

1>------ Build started: Project: prueba_klein_msvc2019, Configuration: Debug x64 ------
1>main.cpp
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(20,32): warning C4305: 'initializing': truncation from 'long double' to 'const float'
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(20): message : see reference to variable template 'const float pi_v<float>' being compiled
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(25,36): warning C4305: 'initializing': truncation from 'long double' to 'const float'
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(25): message : see reference to variable template 'const float pi_2_v<float>' being compiled
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(30,36): warning C4305: 'initializing': truncation from 'long double' to 'const float'
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(30): message : see reference to variable template 'const float pi_4_v<float>' being compiled
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(36,34): warning C4305: 'initializing': truncation from 'long double' to 'const float'
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(36): message : see reference to variable template 'const float tau_v<float>' being compiled
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(41,30): warning C4305: 'initializing': truncation from 'long double' to 'const float'
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(41): message : see reference to variable template 'const float e_v<float>' being compiled
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(46,38): warning C4305: 'initializing': truncation from 'long double' to 'const float'
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(46): message : see reference to variable template 'const float sqrt2_v<float>' being compiled
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(52,42): warning C4305: 'initializing': truncation from 'long double' to 'const float'
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\util.hpp(52): message : see reference to variable template 'const float sqrt2_2_v<float>' being compiled
1>P:\Mis-Proyectos\Personal\prueba_klein\src\main.cpp(7,33): error C2678: binary '*': no operator found which takes a left-hand operand of type 'kln::line' (or there is no acceptable conversion)
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\line.hpp(152,46): message : could be 'kln::ideal_line kln::operator *(kln::ideal_line,float) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\line.hpp(161,46): message : or       'kln::ideal_line kln::operator *(kln::ideal_line,int) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\line.hpp(169,46): message : or       'kln::ideal_line kln::operator *(float,kln::ideal_line) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\line.hpp(176,46): message : or       'kln::ideal_line kln::operator *(int,kln::ideal_line) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\line.hpp(419,42): message : or       'kln::branch kln::operator *(kln::branch,float) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\line.hpp(427,42): message : or       'kln::branch kln::operator *(kln::branch,int) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\line.hpp(433,42): message : or       'kln::branch kln::operator *(float,kln::branch) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\line.hpp(439,42): message : or       'kln::branch kln::operator *(int,kln::branch) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\line.hpp(759,40): message : or       'kln::line kln::operator *(kln::line,float) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\line.hpp(769,40): message : or       'kln::line kln::operator *(kln::line,int) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\line.hpp(775,40): message : or       'kln::line kln::operator *(float,kln::line) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\line.hpp(781,40): message : or       'kln::line kln::operator *(int,kln::line) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\direction.hpp(149,45): message : or       'kln::direction kln::operator *(kln::direction,float) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\direction.hpp(157,45): message : or       'kln::direction kln::operator *(float,kln::direction) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\direction.hpp(163,45): message : or       'kln::direction kln::operator *(kln::direction,int) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\direction.hpp(169,45): message : or       'kln::direction kln::operator *(int,kln::direction) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\point.hpp(193,41): message : or       'kln::point kln::operator *(kln::point,float) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\point.hpp(201,41): message : or       'kln::point kln::operator *(float,kln::point) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\point.hpp(207,41): message : or       'kln::point kln::operator *(kln::point,int) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\point.hpp(213,41): message : or       'kln::point kln::operator *(int,kln::point) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\plane.hpp(269,41): message : or       'kln::plane kln::operator *(kln::plane,float) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\plane.hpp(277,41): message : or       'kln::plane kln::operator *(float,kln::plane) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\plane.hpp(283,41): message : or       'kln::plane kln::operator *(kln::plane,int) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\plane.hpp(289,41): message : or       'kln::plane kln::operator *(int,kln::plane) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\rotor.hpp(390,41): message : or       'kln::rotor kln::operator *(kln::rotor,float) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\rotor.hpp(398,41): message : or       'kln::rotor kln::operator *(kln::rotor,int) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\rotor.hpp(404,41): message : or       'kln::rotor kln::operator *(float,kln::rotor) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\rotor.hpp(410,41): message : or       'kln::rotor kln::operator *(int,kln::rotor) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\translator.hpp(231,46): message : or       'kln::translator kln::operator *(kln::translator,float) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\translator.hpp(240,46): message : or       'kln::translator kln::operator *(kln::translator,int) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\translator.hpp(248,46): message : or       'kln::translator kln::operator *(float,kln::translator) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\translator.hpp(255,46): message : or       'kln::translator kln::operator *(int,kln::translator) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\motor.hpp(547,41): message : or       'kln::motor kln::operator *(kln::motor,float) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\motor.hpp(557,41): message : or       'kln::motor kln::operator *(kln::motor,int) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\motor.hpp(563,41): message : or       'kln::motor kln::operator *(float,kln::motor) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\motor.hpp(569,41): message : or       'kln::motor kln::operator *(int,kln::motor) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\dual.hpp(67,40): message : or       'kln::dual kln::operator *(kln::dual,float) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\dual.hpp(72,40): message : or       'kln::dual kln::operator *(float,kln::dual) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(81,41): message : or       'kln::motor kln::operator *(kln::plane,kln::plane) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(88,41): message : or       'kln::motor kln::operator *(kln::plane,kln::point) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(95,41): message : or       'kln::motor kln::operator *(kln::point,kln::plane) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(104,41): message : or       'kln::rotor kln::operator *(kln::branch,kln::branch) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(114,41): message : or       'kln::motor kln::operator *(kln::line,kln::line) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(124,46): message : or       'kln::translator kln::operator *(kln::point,kln::point) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(133,41): message : or       'kln::rotor kln::operator *(kln::rotor,kln::rotor) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(145,40): message : or       'kln::line kln::operator *(kln::dual,kln::line) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(152,40): message : or       'kln::line kln::operator *(kln::line,kln::dual) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(158,41): message : or       'kln::motor kln::operator *(kln::rotor,kln::translator) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(167,41): message : or       'kln::motor kln::operator *(kln::translator,kln::rotor) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(177,46): message : or       'kln::translator kln::operator *(kln::translator,kln::translator) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(184,41): message : or       'kln::motor kln::operator *(kln::rotor,kln::motor) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(193,41): message : or       'kln::motor kln::operator *(kln::motor,kln::rotor) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(202,41): message : or       'kln::motor kln::operator *(kln::translator,kln::motor) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(212,41): message : or       'kln::motor kln::operator *(kln::motor,kln::translator) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\inc\klein\public\klein\geometric_product.hpp(222,41): message : or       'kln::motor kln::operator *(kln::motor,kln::motor) noexcept' [found using argument-dependent lookup]
1>P:\Mis-Proyectos\Personal\prueba_klein\src\main.cpp(7,33): message : while trying to match the argument list '(kln::line, kln::plane)'
1>Done building project "prueba_klein_msvc2019.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

This code snippet can be found here.

DJuego

Sorry this is actually a documentation bug. In this case, the Klein code that should be used in the last line is kln::point P_on_p{ (p | P) ^ p };

The geometric product between a line and a point is not defined by Klein because it does not always map to a point in general. In this case however, it does because the projection extinguishes components along the plane. I'll close this issue when I fix the documentation