Inner Product
group dot
The symmetric inner product takes two arguments and contracts the lower graded element to the greater graded element. If lower graded element spans an index that is not contained in the higher graded element, the result is annihilated. Otherwise, the result is the part of the higher graded element "most unlike" the lower graded element. Thus, the symmetric inner product can be thought of as a bidirectional contraction operator.
There is some merit in providing both a left and right contraction operator for explicitness. However, when using Klein, it's generally clear what the interpretation of the symmetric inner product is with respect to the projection on various entities.
Angle between planes
kln::plane a{x1, y1, z1, d1};
kln::plane b{x2, y2, z2, d2};
// Compute the cos of the angle between two planes
float cos_ang = a  b;
Line to plane through point
kln::point a{x1, y1, z1};
kln::plane b{x2, y2, z2, d2};
// The line l contains a and the shortest path from a to plane b.
line l = a  b;
Summary
Members  Descriptions 

public float operator\ (plane a,plane b) noexcept 

public plane operator\ (plane a,line b) noexcept 

public plane operator\ (line b,plane a) noexcept 

public plane operator\ (plane a,ideal_line b) noexcept 

public plane operator\ (ideal_line b,plane a) noexcept 

public line operator\ (plane a,point b) noexcept 

public line operator\ (point a,plane b) noexcept 

public float operator\ (line a,line b) noexcept 

public plane operator\ (point a,line b) noexcept 

public plane operator\ (line b,point a) noexcept 

public float operator\ (point a,point b) noexcept 