Including the code below in an application will yield a compiler error similar to the following:
/path/to/MatX/include/matx/transforms/conv.h(192): error: class "matx::detail::ShiftOp<0, matx::tensor_t<float, 1,
matx::basic_storage<matx::raw_pointer_buffer<float, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cu
da::std::__4::array<long long, 1UL>, 1>>, int>" has no member "shape_type"
using shape_type = std::conditional_t<has_shape_type_v<OutputType>, typename OutputType::shape_type, index_t>;
^
detected during:
instantiation of "void matx::detail::matxDirectConv1DInternal(OutputType &, const InType &, const FilterType &, matx::matxConvCorrMod
e_t, const matx::cudaExecutor &) [with OutputType=matx::detail::ShiftOp<0, matx::tensor_t<float, 1, matx::basic_storage<matx::raw_pointer_buffer<
float, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>>, int>
, InType=matx::detail::tensor_impl_t<float, 1, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>,
1>, matx::detail::DenseTensorData<float>>, FilterType=matx::detail::tensor_impl_t<float, 1, matx::tensor_desc_t<cuda::std::__4::array<long long,
1UL>, cuda::std::__4::array<long long, 1UL>, 1>, matx::detail::DenseTensorData<float>>]" at line 288
instantiation of "void matx::conv1d_impl_internal(OutputType &, const In1Type &, const In2Type &, matx::matxConvCorrMode_t, matx::mat
xConvCorrMethod_t, const Executor &) [with OutputType=matx::detail::ShiftOp<0, matx::tensor_t<float, 1, matx::basic_storage<matx::raw_pointer_buf
fer<float, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>>,
int>, In1Type=matx::detail::tensor_impl_t<float, 1, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1
UL>, 1>, matx::detail::DenseTensorData<float>>, In2Type=matx::detail::tensor_impl_t<float, 1, matx::tensor_desc_t<cuda::std::__4::array<long long
, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>, matx::detail::DenseTensorData<float>>, Executor=matx::cudaExecutor]" at line 388
instantiation of "void matx::conv1d_impl(OutputType, const In1Type &, const In2Type &, matx::matxConvCorrMode_t, matx::matxConvCorrMe
thod_t, const Executor &) [with OutputType=matx::detail::ShiftOp<0, matx::tensor_t<float, 1, matx::basic_storage<matx::raw_pointer_buffer<float,
matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>>, int>, In1Ty
pe=matx::detail::tensor_impl_t<float, 1, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>, ma
tx::detail::DenseTensorData<float>>, In2Type=matx::detail::tensor_impl_t<float, 1, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cud
a::std::__4::array<long long, 1UL>, 1>, matx::detail::DenseTensorData<float>>, Executor=matx::cudaExecutor]" at line 161 of
/path/to/MatX/include/matx/operators/conv.h
instantiation of "void matx::detail::Conv1DOp<OpA, OpB, PermDims>::Exec(Out &&, Executor &&) const [with OpA=matx::tensor_t<float, 1,
matx::basic_storage<matx::raw_pointer_buffer<float, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cu
da::std::__4::array<long long, 1UL>, 1>>, OpB=matx::tensor_t<float, 1, matx::basic_storage<matx::raw_pointer_buffer<float, matx::matx_allocator<f
loat>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>>, PermDims=matx::detail::no_permute
_t, Out=cuda::std::__4::tuple<matx::detail::ShiftOp<0, matx::tensor_t<float, 1, matx::basic_storage<matx::raw_pointer_buffer<float, matx::matx_al
locator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>>, int>, matx::detail::Conv
1DOp<matx::tensor_t<float, 1, matx::basic_storage<matx::raw_pointer_buffer<float, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::_
_4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>>, matx::tensor_t<float, 1, matx::basic_storage<matx::raw_pointer_buffer<floa
t, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>>, matx::de
tail::no_permute_t>> &, Executor=matx::cudaExecutor &]" at line 100 of /path/to/MatX/include/matx/core/tie.h
instantiation of "void matx::mtie<Ts...>::Exec(Executor &&) [with Ts=<matx::detail::ShiftOp<0, matx::tensor_t<float, 1, matx::basic_s
torage<matx::raw_pointer_buffer<float, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::
array<long long, 1UL>, 1>>, int>, matx::detail::Conv1DOp<matx::tensor_t<float, 1, matx::basic_storage<matx::raw_pointer_buffer<float, matx::matx_
allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>>, matx::tensor_t<float,
1, matx::basic_storage<matx::raw_pointer_buffer<float, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>,
cuda::std::__4::array<long long, 1UL>, 1>>, matx::detail::no_permute_t>>, Executor=matx::cudaExecutor &]" at line 73 of
/path/to/MatX/include/matx/operators/base_operator.h
instantiation of "void matx::BaseOp<T>::run(Ex &&) [with T=matx::mtie<matx::detail::ShiftOp<0, matx::tensor_t<float, 1, matx::basic_s
torage<matx::raw_pointer_buffer<float, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::
array<long long, 1UL>, 1>>, int>, matx::detail::Conv1DOp<matx::tensor_t<float, 1, matx::basic_storage<matx::raw_pointer_buffer<float, matx::matx_
allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>>, matx::tensor_t<float,
1, matx::basic_storage<matx::raw_pointer_buffer<float, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>,
cuda::std::__4::array<long long, 1UL>, 1>>, matx::detail::no_permute_t>>, Ex=matx::cudaExecutor]" at line 112 of
/path/to/MatX/include/matx/operators/base_operator.h
instantiation of "void matx::BaseOp<T>::run(cudaStream_t) [with T=matx::mtie<matx::detail::ShiftOp<0, matx::tensor_t<float, 1, matx::
basic_storage<matx::raw_pointer_buffer<float, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std
::__4::array<long long, 1UL>, 1>>, int>, matx::detail::Conv1DOp<matx::tensor_t<float, 1, matx::basic_storage<matx::raw_pointer_buffer<float, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>>, matx::tensor_t<float, 1, matx::basic_storage<matx::raw_pointer_buffer<float, matx::matx_allocator<float>>>, matx::tensor_desc_t<cuda::std::__4::array<long long, 1UL>, cuda::std::__4::array<long long, 1UL>, 1>>, matx::detail::no_permute_t>>]" at line 53 of /path/to/MatX/examples/shape_type_repro.cu
Valid composition of built-in operators should not generate compiler errors.
Describe the Bug
Some, but not all, operators include a
shape_typetype trait. Because the existence of the trait is inconsistent, the use ofstd::conditional_t<>to define a local shape_type depending on other operator traits will fail when composed with operators lackingshape_type.To Reproduce
Including the code below in an application will yield a compiler error similar to the following:
Expected Behavior
Valid composition of built-in operators should not generate compiler errors.
Code Snippets
System Details (please complete the following information):
Additional Context