Thread overview
isValidBinaryOp doesn't compile
Sep 14, 2013
Nordlöw
Sep 14, 2013
Andrej Mitrovic
Sep 14, 2013
Artur Skawina
Sep 15, 2013
Nordlöw
September 14, 2013
In the post

http://forum.dlang.org/thread/bug-6384-3@http.d.puremagic.com/issues/

I tried to compile

template isValidBinaryOp(T1, string op, T2) {
   alias isValidBinaryOp = is(mixin("T1.init" ~ op ~ "T2.init") : bool);
}

but it fails as

/home/per/Work/cognia/t_geom.d(80): Error: basic type expected, not is
/home/per/Work/cognia/t_geom.d(80): Error: semicolon expected to close alias declaration
/home/per/Work/cognia/t_geom.d(80): Error: Declaration expected, not 'is'

What is wrong?
September 14, 2013
On 9/14/13, "Nordlöw" <per.nordlow@gmail.com> wrote:
> In the post
>
> http://forum.dlang.org/thread/bug-6384-3@http.d.puremagic.com/issues/
>
> I tried to compile
>
> template isValidBinaryOp(T1, string op, T2) {
>     alias isValidBinaryOp = is(mixin("T1.init" ~ op ~ "T2.init") :
> bool);
> }
>
> What is wrong?

Use "enum isValidBinaryOp = is..".

Aliases are used to create symbols which refer to other symbols but not to values.
September 14, 2013
On 09/14/13 22:45, "Nordlöw" wrote:
> In the post
> 
> http://forum.dlang.org/thread/bug-6384-3@http.d.puremagic.com/issues/
> 
> I tried to compile
> 
> template isValidBinaryOp(T1, string op, T2) {
>    alias isValidBinaryOp = is(mixin("T1.init" ~ op ~ "T2.init") : bool);
> }
> 
> but it fails as
> 
> /home/per/Work/cognia/t_geom.d(80): Error: basic type expected, not is
> /home/per/Work/cognia/t_geom.d(80): Error: semicolon expected to close alias declaration
> /home/per/Work/cognia/t_geom.d(80): Error: Declaration expected, not 'is'
> 
> What is wrong?

'is()' returns a value, not a type. Also, a binary op does not necessarily have to result in a type that implicitly converts to 'bool.

   template isValidBinaryOp(T1, string op, T2) {
      enum isValidBinaryOp = is(typeof(mixin("T1.init" ~ op ~ "T2.init")));
   }

artur
September 15, 2013
Thx.