00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ThePEG_Complex_H
00010 #define ThePEG_Complex_H
00011
00012
00013
00014
00015
00016 #include <complex>
00017
00018 namespace ThePEG {
00019
00020 using std::complex;
00021
00023 typedef std::complex<double> Complex;
00024
00027 template <typename T, typename U>
00028 struct BinaryOpTraits;
00029
00030
00031 template <typename T, typename U>
00032 struct BinaryOpTraits<complex<T>, U> {
00035 typedef complex<typename BinaryOpTraits<T,U>::MulT> MulT;
00038 typedef complex<typename BinaryOpTraits<T,U>::DivT> DivT;
00039
00040 };
00041
00042 template <typename T, typename U>
00043 struct BinaryOpTraits<T, complex<U> > {
00046 typedef complex<typename BinaryOpTraits<T,U>::MulT> MulT;
00049 typedef complex<typename BinaryOpTraits<T,U>::DivT> DivT;
00050
00051 };
00052
00053 template <typename T, typename U>
00054 struct BinaryOpTraits<complex<T>, complex<U> > {
00057 typedef complex<typename BinaryOpTraits<T,U>::MulT> MulT;
00060 typedef complex<typename BinaryOpTraits<T,U>::DivT> DivT;
00061
00062 };
00063
00064 template <typename T>
00065 struct BinaryOpTraits<complex<T>, complex<T> > {
00068 typedef complex<typename BinaryOpTraits<T,T>::MulT> MulT;
00071 typedef complex<typename BinaryOpTraits<T,T>::DivT> DivT;
00072
00075 };
00076
00077
00078
00079 }
00080
00081 #endif
00082