[std.traits] Detect complex numbers
There is "isFloatingPointType!T" to find out whether type T is one of the floating point types but I could not find anything equivalent for complex numbers (cdouble, cfloat, creal) in Phobos 2.066 (which I installed with MacPorts for the record). Am I missing something? My goal was to detect types suitable as scalars in a linear algebra context. I had to do it by hand: enum bool supportedScalar(T) = is(ScalarTypeOf!T) && !isAggregateType!T; private { alias ScalarTypeList = TypeTuple!(float, double, real, cfloat, cdouble, creal); template ScalarTypeOf(T) { static if (is(AliasThisTypeOf!T AT) && !is(AT[] == AT)) alias X = ScalarTypeOf!AT; else alias X = OriginalType!T; static if (staticIndexOf!(Unqual!X, ScalarTypeList) >= 0) alias ScalarTypeOf = X; else static assert(0, T.stringof~" is not a floating point type"); } }
Re: [std.traits] Detect complex numbers
I forgot to mention the obvious: I simply parroted the code in std.traits!
Re: [std.traits] Detect complex numbers
On Wednesday, 14 January 2015 at 13:38:05 UTC, Luc Bourhis wrote: There is "isFloatingPointType!T" to find out whether type T is one of the floating point types but I could not find anything equivalent for complex numbers (cdouble, cfloat, creal) in Phobos 2.066 (which I installed with MacPorts for the record). Am I missing something? My goal was to detect types suitable as scalars in a linear algebra context. I had to do it by hand: enum bool supportedScalar(T) = is(ScalarTypeOf!T) && !isAggregateType!T; private { alias ScalarTypeList = TypeTuple!(float, double, real, cfloat, cdouble, creal); template ScalarTypeOf(T) { static if (is(AliasThisTypeOf!T AT) && !is(AT[] == AT)) alias X = ScalarTypeOf!AT; else alias X = OriginalType!T; static if (staticIndexOf!(Unqual!X, ScalarTypeList) >= 0) alias ScalarTypeOf = X; else static assert(0, T.stringof~" is not a floating point type"); } } It doesn't answer your question as such, but you should take a look at: http://dlang.org/phobos/std_complex.html
Re: [std.traits] Detect complex numbers
It doesn't answer your question as such, but you should take a look at: http://dlang.org/phobos/std_complex.html The planned obsolescence of cdouble and consort is another issue I wanted to raise actually but better do it in a dedicated thread.