[std.traits] Detect complex numbers

2015-01-14 Thread Luc Bourhis via Digitalmars-d
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

2015-01-14 Thread Luc Bourhis via Digitalmars-d
I forgot to mention the obvious: I simply parroted the code in 
std.traits!


Re: [std.traits] Detect complex numbers

2015-01-14 Thread John Colvin via Digitalmars-d

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

2015-01-14 Thread Luc Bourhis via Digitalmars-d
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.