
namespace Eigen {

/** \defgroup Unsupported_modules Unsupported modules
  *
  * The unsupported modules are contributions from various users. They are
  * provided "as is", without any support. Nevertheless, they are subject to be
  * included in Eigen in the future.
  */

// please list here all unsupported modules

/** \ingroup Unsupported_modules
  * \defgroup AdolcForward_Module Adolc forward module */

/** \ingroup Unsupported_modules
  * \defgroup IterativeSolvers_Module Iterative solvers module */

/** \ingroup Unsupported_modules
  * \defgroup BVH_Module BVH module */

} // namespace Eigen