std::complex<typename ProductType<T, U>::type>>;
};
+
+ template <int rank, int dim, typename T, typename U>
+ struct ProductTypeImpl<SymmetricTensor<rank, dim, std::complex<T>>,
+ std::complex<U>>
+ {
+ using type =
+ SymmetricTensor<rank,
+ dim,
+ std::complex<typename ProductType<T, U>::type>>;
+ };
+
template <typename T, int rank, int dim, typename U>
struct ProductTypeImpl<std::complex<T>, SymmetricTensor<rank, dim, U>>
{
std::complex<typename ProductType<T, U>::type>>;
};
+ template <int rank, int dim, typename T, typename U>
+ struct ProductTypeImpl<std::complex<T>,
+ SymmetricTensor<rank, dim, std::complex<U>>>
+ {
+ using type =
+ SymmetricTensor<rank,
+ dim,
+ std::complex<typename ProductType<T, U>::type>>;
+ };
+
/**
* A namespace for functions and classes that are internal to how the
* SymmetricTensor class (and its associate functions) works.
Tensor<rank, dim, std::complex<typename ProductType<T, U>::type>>;
};
+ template <int rank, int dim, typename T, typename U>
+ struct ProductTypeImpl<Tensor<rank, dim, std::complex<T>>, std::complex<U>>
+ {
+ using type =
+ Tensor<rank, dim, std::complex<typename ProductType<T, U>::type>>;
+ };
+
template <typename T, int rank, int dim, typename U>
struct ProductTypeImpl<std::complex<T>, Tensor<rank, dim, U>>
{
Tensor<rank, dim, std::complex<typename ProductType<T, U>::type>>;
};
+ template <int rank, int dim, typename T, typename U>
+ struct ProductTypeImpl<std::complex<T>, Tensor<rank, dim, std::complex<U>>>
+ {
+ using type =
+ Tensor<rank, dim, std::complex<typename ProductType<T, U>::type>>;
+ };
+
/**
* The structs below are needed to initialize nested Tensor objects.
* Also see numbers.h for another specialization.