Skip to content

Cannot create a batch of xtl::xcomplex #771

@lamyj

Description

@lamyj

Using current HEAD or latest tags (8.1.0 for xsimd and 0.7.4 for xtl), creating a xsimd::batch<xtl::xcomplex<double>> yields a compile-time error.

Minimal working example:

#define XSIMD_ENABLE_XTL_COMPLEX 1
#include <xsimd/xsimd.hpp>

int main()
{
    xsimd::batch<xtl::xcomplex<double>> foo;
    return 0;
}

The compile error is, using g++ -I xtl/include -I xsimd/include -std=c++14 -c foo.cpp is:

In file included from xsimd/include/xsimd/memory/../config/../types/../types/./././././xsimd_sse2_register.hpp:16:0,
                 from xsimd/include/xsimd/memory/../config/../types/../types/././././xsimd_sse3_register.hpp:15,
                 from xsimd/include/xsimd/memory/../config/../types/../types/./././xsimd_ssse3_register.hpp:15,
                 from xsimd/include/xsimd/memory/../config/../types/../types/././xsimd_sse4_1_register.hpp:15,
                 from xsimd/include/xsimd/memory/../config/../types/../types/./xsimd_sse4_2_register.hpp:15,
                 from xsimd/include/xsimd/memory/../config/../types/../types/xsimd_fma3_sse_register.hpp:15,
                 from xsimd/include/xsimd/memory/../config/../types/xsimd_all_registers.hpp:12,
                 from xsimd/include/xsimd/memory/../config/xsimd_arch.hpp:19,
                 from xsimd/include/xsimd/memory/xsimd_aligned_allocator.hpp:27,
                 from xsimd/include/xsimd/xsimd.hpp:41,
                 from foo.cpp:2:
xsimd/include/xsimd/memory/../config/../types/../types/././././././xsimd_register.hpp: In instantiation of ‘struct xsimd::types::simd_register<xtl::xcomplex<double>, xsimd::sse2>’:
xsimd/include/xsimd/types/xsimd_batch.hpp:46:11:   required from ‘class xsimd::batch<xtl::xcomplex<double> >’
foo.cpp:6:41:   required from here
xsimd/include/xsimd/memory/../config/../types/../types/././././././xsimd_register.hpp:31:13: error: static assertion failed: usage of simd_register with unsupported type
             static_assert(!Arch::supported() || has_simd_register<T, Arch>::value,
             ^~~~~~~~~~~~~
In file included from xsimd/include/xsimd/xsimd.hpp:46:0,
                 from foo.cpp:2:
xsimd/include/xsimd/types/xsimd_batch.hpp: In instantiation of ‘class xsimd::batch<xtl::xcomplex<double> >’:
foo.cpp:6:41:   required from here
xsimd/include/xsimd/types/xsimd_batch.hpp:53:81: error: no type named ‘register_type’ in ‘struct xsimd::types::simd_register<xtl::xcomplex<double>, xsimd::sse2>’
         using register_type = typename types::simd_register<T, A>::register_type; ///< SIMD register type abstracted by this batch.

With xsimd 7.6.0, a similar example (replacing the batch declaration with xsimd::simd_type<xtl::xcomplex<double>> foo works.

Note: I've gotten there when compiling xtensor with -DXTENSOR_USE_XSIMD=ON in the test_xcomplex target. Let me know if this issue should be reported to xtensor.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions