21 #include <type_traits>
24 #include <CL/sycl.hpp>
48 #define _OVERRIDE_COMPLEX_SPECIALIZATION_ 1
54 #if __cplusplus >= 201103L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201103L)
58 #if __cplusplus > 201703L
67 #if defined(EIGEN_USE_HIP)
68 #if defined(__HIPCC__) && !defined(EIGEN_NO_HIP)
69 #define EIGEN_HIPCC __HIPCC__
70 #include <hip/hip_runtime.h>
71 #include <hip/hip_runtime_api.h>
73 #elif defined(__CUDACC__) && !defined(EIGEN_NO_CUDA)
74 #define EIGEN_CUDACC __CUDACC__
76 #include <cuda_runtime.h>
77 #include <cuda_runtime_api.h>
78 #if CUDA_VERSION >= 7050
79 #include <cuda_fp16.h>
83 #if defined(EIGEN_CUDACC) || defined(EIGEN_HIPCC)
84 #define EIGEN_TEST_NO_LONGDOUBLE
85 #define EIGEN_DEFAULT_DENSE_INDEX_TYPE int
92 #if !defined(__HIPCC__) && !defined(EIGEN_USE_SYCL) && !defined(EIGEN_POCKETFFT_DEFAULT)
107 #define min(A, B) please_protect_your_min_with_parentheses
108 #define max(A, B) please_protect_your_max_with_parentheses
109 #define isnan(X) please_protect_your_isnan_with_parentheses
110 #define isinf(X) please_protect_your_isinf_with_parentheses
111 #define isfinite(X) please_protect_your_isfinite_with_parentheses
121 #define M_PI please_use_EIGEN_PI_instead_of_M_PI
123 #define FORBIDDEN_IDENTIFIER \
124 (this_identifier_is_forbidden_to_avoid_clashes) this_identifier_is_forbidden_to_avoid_clashes
126 #define B0 FORBIDDEN_IDENTIFIER
127 #define I FORBIDDEN_IDENTIFIER
130 #define _res FORBIDDEN_IDENTIFIER
134 #ifndef EIGEN_NO_DEBUG_SMALL_PRODUCT_BLOCKS
135 #define EIGEN_DEBUG_SMALL_PRODUCT_BLOCKS
139 #define TEST_SET_BUT_UNUSED_VARIABLE(X) EIGEN_UNUSED_VARIABLE(X)
141 #ifdef TEST_ENABLE_TEMPORARY_TRACKING
144 static long int nb_temporaries_on_assert = -1;
146 #ifdef TEST_IGNORE_STACK_ALLOCATED_TEMPORARY
149 if (SizeAtCompileTime != -1)
return;
158 #define EIGEN_DENSE_STORAGE_CTOR_PLUGIN \
159 { on_temporary_creation(size, Size); }
161 #define VERIFY_EVALUATION_COUNT(XPR, N) \
163 nb_temporaries = 0; \
165 if (nb_temporaries != (N)) { \
166 std::cerr << "nb_temporaries == " << nb_temporaries << "\n"; \
168 VERIFY((#XPR) && nb_temporaries == (N)); \
184 #define DEFAULT_REPEAT 10
208 static std::vector<EigenTest*>* ms_registered_tests =
new std::vector<EigenTest*>();
209 return *ms_registered_tests;
220 #define EIGEN_DECLARE_TEST(X) \
221 void EIGEN_CAT(test_, X)(); \
222 static EigenTest EIGEN_CAT(test_handler_, X)(EIGEN_MAKESTRING(X), &EIGEN_CAT(test_, X)); \
223 void EIGEN_CAT(test_, X)()
226 #define TRACK std::cerr << __FILE__ << " " << __LINE__ << std::endl
228 #define EIGEN_DEFAULT_IO_FORMAT IOFormat(4, 0, " ", "\n", "", "", "", "")
230 #if (defined(_CPPUNWIND) || defined(__EXCEPTIONS)) && !defined(__CUDA_ARCH__) && !defined(__HIP_DEVICE_COMPILE__) && \
231 !defined(__SYCL_DEVICE_ONLY__)
232 #define EIGEN_EXCEPTIONS
235 #ifndef EIGEN_NO_ASSERTION_CHECKING
263 #ifdef EIGEN_DEBUG_ASSERTS
267 static bool push_assert =
false;
269 static std::vector<std::string> eigen_assert_list;
271 #define eigen_assert(a) \
272 if ((!(a)) && (!no_more_assert)) { \
273 if (report_on_cerr_on_assert_failure) std::cerr << #a << " " __FILE__ << "(" << __LINE__ << ")\n"; \
274 Eigen::no_more_assert = true; \
275 EIGEN_THROW_X(Eigen::eigen_assert_exception()); \
276 } else if (Eigen::internal::push_assert) { \
277 eigen_assert_list.push_back(std::string(EIGEN_MAKESTRING(__FILE__) " (" EIGEN_MAKESTRING(__LINE__) ") : " #a)); \
280 #ifdef EIGEN_EXCEPTIONS
281 #define VERIFY_RAISES_ASSERT(a) \
283 Eigen::no_more_assert = false; \
284 Eigen::eigen_assert_list.clear(); \
285 Eigen::internal::push_assert = true; \
286 Eigen::report_on_cerr_on_assert_failure = false; \
289 std::cerr << "One of the following asserts should have been triggered:\n"; \
290 for (uint ai = 0; ai < eigen_assert_list.size(); ++ai) std::cerr << " " << eigen_assert_list[ai] << "\n"; \
291 VERIFY(Eigen::should_raise_an_assert&& #a); \
292 } catch (Eigen::eigen_assert_exception) { \
293 Eigen::internal::push_assert = false; \
296 Eigen::report_on_cerr_on_assert_failure = true; \
297 Eigen::internal::push_assert = false; \
301 #elif !defined(__CUDACC__) && !defined(__HIPCC__) && !defined(__SYCL_DEVICE_ONLY__)
302 #define eigen_assert(a) \
303 if ((!(a)) && (!no_more_assert)) { \
304 Eigen::no_more_assert = true; \
305 if (report_on_cerr_on_assert_failure) { \
306 eigen_plain_assert(a); \
308 EIGEN_THROW_X(Eigen::eigen_assert_exception()); \
312 #ifdef EIGEN_EXCEPTIONS
313 #define VERIFY_RAISES_ASSERT(a) \
315 Eigen::no_more_assert = false; \
316 Eigen::report_on_cerr_on_assert_failure = false; \
319 VERIFY(Eigen::should_raise_an_assert&& #a); \
320 } catch (Eigen::eigen_assert_exception&) { \
323 Eigen::report_on_cerr_on_assert_failure = true; \
328 #ifndef VERIFY_RAISES_ASSERT
329 #define VERIFY_RAISES_ASSERT(a) std::cout << "Can't VERIFY_RAISES_ASSERT( " #a " ) with exceptions disabled\n";
332 #if !defined(__CUDACC__) && !defined(__HIPCC__) && !defined(SYCL_DEVICE_ONLY)
333 #define EIGEN_USE_CUSTOM_ASSERT
338 #define VERIFY_RAISES_ASSERT(a) \
343 #if !defined(EIGEN_TESTING_CONSTEXPR) && !defined(EIGEN_TESTING_PLAINOBJECT_CTOR)
344 #define EIGEN_INTERNAL_DEBUGGING
348 inline void verify_impl(
bool condition,
const char* testname,
const char* file,
int line,
349 const char* condition_as_string) {
352 std::cerr <<
"Test " << testname <<
" failed in " << file <<
" (" <<
line <<
")" << std::endl
353 <<
" " << condition_as_string << std::endl;
354 std::cerr <<
"Stack:\n";
362 #define VERIFY(a) ::verify_impl(a, g_test_stack.back().c_str(), __FILE__, __LINE__, EIGEN_MAKESTRING(a))
364 #define VERIFY_GE(a, b) ::verify_impl(a >= b, g_test_stack.back().c_str(), __FILE__, __LINE__, EIGEN_MAKESTRING(a >= b))
365 #define VERIFY_LE(a, b) ::verify_impl(a <= b, g_test_stack.back().c_str(), __FILE__, __LINE__, EIGEN_MAKESTRING(a <= b))
367 #define VERIFY_IS_EQUAL(a, b) VERIFY(test_is_equal(a, b, true))
368 #define VERIFY_IS_NOT_EQUAL(a, b) VERIFY(test_is_equal(a, b, false))
369 #define VERIFY_IS_APPROX(a, b) VERIFY(verifyIsApprox(a, b))
370 #define VERIFY_IS_NOT_APPROX(a, b) VERIFY(!test_isApprox(a, b))
371 #define VERIFY_IS_MUCH_SMALLER_THAN(a, b) VERIFY(test_isMuchSmallerThan(a, b))
372 #define VERIFY_IS_NOT_MUCH_SMALLER_THAN(a, b) VERIFY(!test_isMuchSmallerThan(a, b))
373 #define VERIFY_IS_APPROX_OR_LESS_THAN(a, b) VERIFY(test_isApproxOrLessThan(a, b))
374 #define VERIFY_IS_NOT_APPROX_OR_LESS_THAN(a, b) VERIFY(!test_isApproxOrLessThan(a, b))
375 #define VERIFY_IS_CWISE_EQUAL(a, b) VERIFY(verifyIsCwiseApprox(a, b, true))
376 #define VERIFY_IS_CWISE_APPROX(a, b) VERIFY(verifyIsCwiseApprox(a, b, false))
378 #define VERIFY_IS_UNITARY(a) VERIFY(test_isUnitary(a))
380 #define STATIC_CHECK(COND) EIGEN_STATIC_ASSERT((COND), EIGEN_INTERNAL_ERROR_PLEASE_FILE_A_BUG_REPORT)
382 #define CALL_SUBTEST(FUNC) \
384 g_test_stack.push_back(EIGEN_MAKESTRING(FUNC)); \
386 g_test_stack.pop_back(); \
392 template <
typename T>
397 template <
typename T,
typename U>
398 bool test_is_equal(
const T& actual,
const U& expected,
bool expect_equal =
true);
406 template <
typename T1,
typename T2>
411 template <
typename T>
428 inline float test_precision<std::complex<float> >() {
432 inline double test_precision<std::complex<double> >() {
436 inline long double test_precision<std::complex<long double> >() {
440 #define EIGEN_TEST_SCALAR_TEST_OVERLOAD(TYPE) \
441 inline bool test_isApprox(TYPE a, TYPE b) { \
442 return numext::equal_strict(a, b) || ((numext::isnan)(a) && (numext::isnan)(b)) || \
443 (internal::isApprox(a, b, test_precision<TYPE>())); \
445 inline bool test_isCwiseApprox(TYPE a, TYPE b, bool exact) { \
446 return numext::equal_strict(a, b) || ((numext::isnan)(a) && (numext::isnan)(b)) || \
447 (!exact && internal::isApprox(a, b, test_precision<TYPE>())); \
449 inline bool test_isMuchSmallerThan(TYPE a, TYPE b) { \
450 return internal::isMuchSmallerThan(a, b, test_precision<TYPE>()); \
452 inline bool test_isApproxOrLessThan(TYPE a, TYPE b) { \
453 return internal::isApproxOrLessThan(a, b, test_precision<TYPE>()); \
469 #undef EIGEN_TEST_SCALAR_TEST_OVERLOAD
471 #ifndef EIGEN_TEST_NO_COMPLEX
472 inline bool test_isApprox(
const std::complex<float>&
a,
const std::complex<float>&
b) {
479 inline bool test_isApprox(
const std::complex<double>&
a,
const std::complex<double>&
b) {
486 #ifndef EIGEN_TEST_NO_LONGDOUBLE
487 inline bool test_isApprox(
const std::complex<long double>&
a,
const std::complex<long double>&
b) {
496 #ifndef EIGEN_TEST_NO_LONGDOUBLE
500 std::cerr << std::endl <<
" actual = " <<
a << std::endl <<
" expected = " <<
b << std::endl << std::endl;
513 template <
typename T1,
typename T2>
520 return sqrt(
RealScalar((ea.matrix() - eb.matrix()).cwiseAbs2().sum()) /
524 template <
typename T1,
typename T2>
529 template <
typename T1,
typename T2>
534 template <
typename S,
int D>
539 template <
typename S,
int D,
int O>
544 template <
typename S,
int D>
549 template <
typename Derived>
551 template <
typename T1,
typename T2>
556 template <
typename Derived>
558 template <
typename T1,
typename T2>
563 template <
typename Derived>
565 template <
typename T1,
typename T2>
570 template <
typename T1,
typename T2>
578 template <
typename T>
583 template <
typename T>
588 template <
typename Type1,
typename Type2>
591 return a.isApprox(
b, test_precision<typename Type1::Scalar>());
596 template <
typename T>
601 template <
typename T>
608 template <
typename Type1,
typename Type2>
620 template <
typename Type1,
typename Type2>
625 std::cerr <<
"Values are not an exact match";
641 template <
typename Scalar,
typename ScalarRef>
646 template <
typename Derived1,
typename Derived2>
651 template <
typename Derived>
657 template <
typename Derived>
663 template <
typename Derived1,
typename Derived2>
665 if (
m1.rows() !=
m2.rows()) {
668 if (
m1.cols() !=
m2.cols()) {
682 template <
typename Derived1,
typename Derived2>
687 template <
typename T,
typename U>
691 std::cerr <<
"\n actual = " << actual <<
"\n expected " << (expect_equal ?
"= " :
"!=") << expected <<
"\n\n";
702 template <
typename T>
714 template <
typename T>
726 template <
typename T>
728 return x < NumTraits<T>::lowest();
735 template <
typename T>
746 template <
typename T>
751 template <
typename T>
753 return typeid(
T).
name();
765 return "long double";
808 std::string type_name<std::complex<float> >(std::complex<float>) {
809 return "complex<float>";
812 std::string type_name<std::complex<double> >(std::complex<double>) {
813 return "complex<double>";
816 std::string type_name<std::complex<long double> >(std::complex<long double>) {
817 return "complex<long double>";
821 return "complex<int>";
823 template <
typename T>
828 using namespace Eigen;
839 std::cout <<
"Invalid repeat value " <<
str << std::endl;
853 if (errno ||
g_seed == 0) {
854 std::cout <<
"Invalid seed value " <<
str << std::endl;
860 int main(
int argc,
char* argv[]) {
863 bool need_help =
false;
865 for (
int i = 1;
i < argc;
i++) {
866 if (argv[
i][0] ==
'r') {
868 std::cout <<
"Argument " << argv[
i] <<
" conflicting with a former argument" << std::endl;
872 }
else if (argv[
i][0] ==
's') {
874 std::cout <<
"Argument " << argv[
i] <<
" conflicting with a former argument" << std::endl;
884 std::cout <<
"This test application takes the following optional arguments:" << std::endl;
885 std::cout <<
" rN Repeat each test N times (default: " <<
DEFAULT_REPEAT <<
")" << std::endl;
886 std::cout <<
" sN Use N as seed for random numbers (default: based on current time)" << std::endl;
887 std::cout << std::endl;
888 std::cout <<
"If defined, the environment variables EIGEN_REPEAT and EIGEN_SEED" << std::endl;
889 std::cout <<
"will be used as default values for these parameters." << std::endl;
893 char* env_EIGEN_REPEAT = getenv(
"EIGEN_REPEAT");
895 char* env_EIGEN_SEED = getenv(
"EIGEN_SEED");
901 std::cout <<
"Initializing random number generator with seed " <<
g_seed << std::endl;
902 std::stringstream ss;
906 std::cout <<
"Repeating each test " <<
g_repeat <<
" times" << std::endl;
921 #if defined __INTEL_COMPILER
929 #pragma warning disable 279 383 1418 1572
934 #pragma warning(disable : 4503)
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Eigen::Triplet< double > T
Definition: EigenUnitTest.cpp:11
#define assert(e,...)
Definition: Logger.h:744
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
Scalar * b
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
boost::multiprecision::number< boost::multiprecision::cpp_dec_float< 100 >, boost::multiprecision::et_on > Real
Definition: boostmultiprec.cpp:77
An axis aligned box.
Definition: AlignedBox.h:69
Represents a 3D rotation as a rotation angle around an arbitrary 3D axis.
Definition: AngleAxis.h:52
Base class for all dense matrices, vectors, and arrays.
Definition: DenseBase.h:44
EigenTest(const char *a_name, void(*func)(void))
Definition: main.h:198
EigenTest()
Definition: main.h:197
void operator()() const
Definition: main.h:202
std::string m_name
Definition: main.h:211
const std::string & name() const
Definition: main.h:201
void(* m_func)(void)
Definition: main.h:212
static const std::vector< EigenTest * > & all()
Definition: main.h:204
static std::vector< EigenTest * > & get_registered_tests()
Definition: main.h:207
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:52
A parametrized line.
Definition: ParametrizedLine.h:33
Represents a rotation/orientation in a 2 dimensional space.
Definition: Rotation2D.h:44
Base class of any sparse matrices or sparse expressions.
Definition: SparseMatrixBase.h:30
Represents a translation transformation.
Definition: Translation.h:33
RealScalar s
Definition: level1_cplx_impl.h:130
Eigen::DenseIndex ret
Definition: level1_cplx_impl.h:43
const Scalar * a
Definition: level2_cplx_impl.h:32
int * m
Definition: level2_cplx_impl.h:294
std::string type_name< float >(float)
Definition: main.h:756
std::string type_name< uint32_t >(uint32_t)
Definition: main.h:800
int main(int argc, char *argv[])
Definition: main.h:860
std::string type_name< int8_t >(int8_t)
Definition: main.h:776
#define max(A, B)
Definition: main.h:108
#define min(A, B)
Definition: main.h:107
#define DEFAULT_REPEAT
Definition: main.h:184
std::string type_name(T)
Definition: main.h:752
std::string type_name< int16_t >(int16_t)
Definition: main.h:780
std::string type_name< int64_t >(int64_t)
Definition: main.h:788
void verify_impl(bool condition, const char *testname, const char *file, int line, const char *condition_as_string)
Definition: main.h:348
#define VERIFY(a)
Definition: main.h:362
std::string type_name< double >(double)
Definition: main.h:760
std::string type_name< uint8_t >(uint8_t)
Definition: main.h:792
std::string type_name< int32_t >(int32_t)
Definition: main.h:784
void set_repeat_from_string(const char *str)
Definition: main.h:835
std::string type_name< uint64_t >(uint64_t)
Definition: main.h:804
void set_seed_from_string(const char *str)
Definition: main.h:850
std::string type_name< long double >(long double)
Definition: main.h:764
std::string type_name< uint16_t >(uint16_t)
Definition: main.h:796
#define EIGEN_TEST_SCALAR_TEST_OVERLOAD(TYPE)
Definition: main.h:440
EIGEN_DEVICE_FUNC bool isApprox(const Scalar &x, const Scalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition: MathFunctions.h:1923
EIGEN_DEVICE_FUNC bool isMuchSmallerThan(const Scalar &x, const OtherScalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition: MathFunctions.h:1916
EIGEN_DEVICE_FUNC bool isApproxOrLessThan(const Scalar &x, const Scalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition: MathFunctions.h:1930
std::int32_t int32_t
Definition: Meta.h:41
std::int8_t int8_t
Definition: Meta.h:37
std::uint8_t uint8_t
Definition: Meta.h:36
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool equal_strict(const X &x, const Y &y)
Definition: Meta.h:571
std::int16_t int16_t
Definition: Meta.h:39
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool() isnan(const Eigen::bfloat16 &h)
Definition: BFloat16.h:742
std::int64_t int64_t
Definition: Meta.h:43
std::uint16_t uint16_t
Definition: Meta.h:38
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE float sqrt(const float &x)
Definition: arch/SSE/MathFunctions.h:69
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
Definition: MathFunctions.h:920
std::uint32_t uint32_t
Definition: Meta.h:40
std::uint64_t uint64_t
Definition: Meta.h:42
EIGEN_DEVICE_FUNC bool abs2(bool x)
Definition: MathFunctions.h:1102
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
NumTraits< T >::Real test_precision()
Definition: main.h:412
bool isNotNaN(const T &x)
Definition: main.h:703
static bool no_more_assert
Definition: main.h:243
squared absolute value
Definition: GlobalFunctions.h:87
bool test_isApproxOrLessThan(const long double &a, const long double &b)
Definition: main.h:507
bool verifyIsCwiseApprox(const Type1 &a, const Type2 &b, bool exact)
Definition: main.h:621
bool test_isMuchSmallerThan(const std::complex< float > &a, const std::complex< float > &b)
Definition: main.h:475
static int g_repeat
Definition: main.h:191
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
float test_precision< float >()
Definition: main.h:416
std::enable_if_t< internal::is_same< T1, T2 >::value, bool > is_same_type(const T1 &, const T2 &)
Definition: main.h:407
bool isMinusInf(const T &x)
Definition: main.h:727
long double test_precision< long double >()
Definition: main.h:424
bool verifyIsApprox(const Type1 &a, const Type2 &b)
Definition: main.h:609
bool test_isCwiseApprox(const DenseBase< Derived1 > &m1, const DenseBase< Derived2 > &m2, bool exact)
Definition: main.h:664
double test_precision< double >()
Definition: main.h:420
bool test_isApprox(const std::complex< float > &a, const std::complex< float > &b)
Definition: main.h:472
static int g_test_level
Definition: main.h:190
NumTraits< typename T::Scalar >::Real get_test_precision(const T &, const typename T::Scalar *=0)
Definition: main.h:597
bool test_isUnitary(const MatrixBase< Derived > &m)
Definition: main.h:658
static unsigned int g_seed
Definition: main.h:192
bool isPlusInf(const T &x)
Definition: main.h:715
bool test_is_equal(const T &actual, const U &expected, bool expect_equal)
Definition: main.h:688
static bool g_has_set_seed
Definition: main.h:193
bool test_isApproxWithRef(const Scalar &a, const Scalar &b, const ScalarRef &ref)
Definition: main.h:642
NumTraits< typename T1::RealScalar >::NonInteger test_relative_error(const EigenBase< T1 > &a, const EigenBase< T2 > &b)
Definition: main.h:514
static std::vector< std::string > g_test_stack
Definition: main.h:187
static bool g_has_set_repeat
Definition: main.h:193
static const bool should_raise_an_assert
Definition: main.h:238
static bool report_on_cerr_on_assert_failure
Definition: main.h:244
double U
Swimming speed.
Definition: two_d_variable_diff_adapt.cc:53
int c
Definition: calibrate.py:100
line
Definition: calibrate.py:103
type
Definition: compute_granudrum_aor.py:141
str
Definition: compute_granudrum_aor.py:141
Definition: Eigen_Colamd.h:49
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
@ S
Definition: quadtree.h:62
list x
Definition: plotDoE.py:28
string name
Definition: plotDoE.py:33
static long int nb_temporaries
Definition: sparse_permutations.cpp:21
Definition: EigenBase.h:33
T Real
Definition: NumTraits.h:183
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
Definition: BFloat16.h:101
eigen_assert_exception(void)
Definition: main.h:247
~eigen_assert_exception()
Definition: main.h:248
eigen_static_assert_exception(void)
Definition: main.h:252
~eigen_static_assert_exception()
Definition: main.h:253
std::conditional_t< Evaluate, PlainObject, typename ref_selector< T >::type > type
Definition: XprHelper.h:549
Definition: ForwardDeclarations.h:21
float type
Definition: main.h:744
double type
Definition: main.h:740
std::complex< typename GetDifferentType< T >::type > type
Definition: main.h:748
Definition: datatypes.h:12
Definition: benchGeometry.cpp:21
void on_temporary_creation()
Definition: test/sparse_product.cpp:18