diff --git a/avx/types.h b/avx/types.h index a174713a8..107573041 100644 --- a/avx/types.h +++ b/avx/types.h @@ -108,8 +108,12 @@ template struct is_mask> : public std::true_type {}; namespace Traits { -template struct is_simd_mask_internal> : public std::true_type {}; -template struct is_simd_vector_internal> : public std::true_type {}; +template struct +is_simd_vector_internal> + : public is_valid_vector_argument {}; + +template struct is_simd_mask_internal> + : public std::true_type {}; } // namespace Traits } // namespace Vc diff --git a/mic/types.h b/mic/types.h index a58c560b9..f9151e68e 100644 --- a/mic/types.h +++ b/mic/types.h @@ -71,8 +71,12 @@ template struct is_mask> : public std::true_type {}; namespace Traits { -template struct is_simd_mask_internal> : public std::true_type {}; -template struct is_simd_vector_internal> : public std::true_type {}; +template struct is_simd_mask_internal> + : public std::true_type {}; + +template struct +is_simd_vector_internal> + : public is_valid_vector_argument {}; } // namespace Traits } // namespace Vc diff --git a/scalar/types.h b/scalar/types.h index e3648f4cc..74f380524 100644 --- a/scalar/types.h +++ b/scalar/types.h @@ -67,8 +67,12 @@ template struct is_mask> : public std::true_type {}; namespace Traits { -template struct is_simd_mask_internal> : public std::true_type {}; -template struct is_simd_vector_internal> : public std::true_type {}; +template struct is_simd_mask_internal> + : public std::true_type {}; + +template struct +is_simd_vector_internal> + : public is_valid_vector_argument {}; } // namespace Traits } // namespace Vc diff --git a/sse/types.h b/sse/types.h index e55e089ef..df938baa7 100644 --- a/sse/types.h +++ b/sse/types.h @@ -69,8 +69,12 @@ template struct is_mask> : public std::true_type {}; namespace Traits { -template struct is_simd_mask_internal> : public std::true_type {}; -template struct is_simd_vector_internal> : public std::true_type {}; +template struct +is_simd_vector_internal> + : public is_valid_vector_argument {}; + +template struct is_simd_mask_internal> + : public std::true_type {}; } // namespace Traits } // namespace Vc diff --git a/traits/type_traits.h b/traits/type_traits.h index 0293561c4..c5744126d 100644 --- a/traits/type_traits.h +++ b/traits/type_traits.h @@ -56,6 +56,16 @@ namespace Traits #include "has_addition_operator.h" #include "has_equality_operator.h" + +template struct is_valid_vector_argument : public std::false_type {}; + +template <> struct is_valid_vector_argument : public std::true_type {}; +template <> struct is_valid_vector_argument : public std::true_type {}; +template <> struct is_valid_vector_argument : public std::true_type {}; +template <> struct is_valid_vector_argument : public std::true_type {}; +template <> struct is_valid_vector_argument : public std::true_type {}; +template <> struct is_valid_vector_argument : public std::true_type {}; + template struct is_simd_mask_internal : public std::false_type {}; template struct is_simd_vector_internal : public std::false_type {}; template struct is_subscript_operation_internal : public std::false_type {};