template<typename G>
requires {
typename G::Scalar;
typename G::Tangent;
typename G::PlainObject;
{G::Dof}->std::convertible_to<int>;
{G::IsCommutative}->std::convertible_to<bool>;
} &&
(!(G::Dof > 0) || requires {
{G::Identity()}->std::convertible_to<typename G::PlainObject>;
{G::Random()}->std::convertible_to<typename G::PlainObject>;
}) &&
(!(G::Dof == -1) ||
requires (Eigen::Index
dof) {
{G::Identity(
dof)}->std::convertible_to<
typename G::PlainObject>;
{G::Random(
dof)}->std::convertible_to<
typename G::PlainObject>;
}) &&
(G::Tangent::SizeAtCompileTime == G::Dof) &&
requires(const G & g1, const G & g2, typename G::Scalar eps) {
{g1.dof()}->std::convertible_to<Eigen::Index>;
{g1.Ad()}->std::convertible_to<Eigen::Matrix<typename G::Scalar, G::Dof, G::Dof>>;
{g1 * g2}->std::convertible_to<typename G::PlainObject>;
{g1.inverse()}->std::convertible_to<typename G::PlainObject>;
{g1.isApprox(g2, eps)}->std::convertible_to<bool>;
{g1.log()}->std::convertible_to<Eigen::Vector<typename G::Scalar, G::Dof>>;
} &&
requires(const Eigen::Vector<typename G::Scalar, G::Dof> & a) {
{G::ad(a)}->std::convertible_to<Eigen::Matrix<typename G::Scalar, G::Dof, G::Dof>>;
{G::exp(a)}->std::convertible_to<typename G::PlainObject>;
{G::dr_exp(a)}->std::convertible_to<Eigen::Matrix<typename G::Scalar, G::Dof, G::Dof>>;
{G::dr_expinv(a)}->std::convertible_to<Eigen::Matrix<typename G::Scalar, G::Dof, G::Dof>>;
{G::d2r_exp(a)}->std::convertible_to<Eigen::Matrix<typename G::Scalar, G::Dof, G::Dof * G::Dof>>;
{G::d2r_expinv(a)}->std::convertible_to<Eigen::Matrix<typename G::Scalar, G::Dof, G::Dof * G::Dof>>;
}
Concept defining class with an internal Lie group interface.
Eigen::Index dof(const M &m)
Manifold degrees of freedom (tangent space dimension)
Concept defining class with an internal Lie group interface.
Concept satisfied if G has members that correspond to the LieGroup concept.
Definition at line 21 of file native.hpp.