www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Function pointer variable not recognized as function by is-operator

reply "Tommi" <tommitissari hotmail.com> writes:
The following compiles, which I'm pretty sure must be a bug, 
right? Just checking to be sure I won't be polluting the bug 
tracker.

void main()
{
     auto f = (int i) {};
     static assert (!is(f == function)); // should fail
     static assert (!is(f == delegate));
}
Oct 07 2012
next sibling parent reply Jonathan M Davis <jmdavisProg gmx.com> writes:
On Sunday, October 07, 2012 10:25:41 Tommi wrote:
 The following compiles, which I'm pretty sure must be a bug,
 right? Just checking to be sure I won't be polluting the bug
 tracker.
 
 void main()
 {
      auto f = (int i) {};
      static assert (!is(f == function)); // should fail
      static assert (!is(f == delegate));
 }

It's not a bug. is(f == function) checks for functions, not function pointers. http://stackoverflow.com/questions/11067972 - Jonathan M Davis
Oct 07 2012
parent Timon Gehr <timon.gehr gmx.ch> writes:
On 10/07/2012 10:35 AM, Jonathan M Davis wrote:
 On Sunday, October 07, 2012 10:25:41 Tommi wrote:
 The following compiles, which I'm pretty sure must be a bug,
 right? Just checking to be sure I won't be polluting the bug
 tracker.

 void main()
 {
       auto f = (int i) {};
       static assert (!is(f == function)); // should fail
       static assert (!is(f == delegate));
 }

It's not a bug. is(f == function) checks for functions, not function pointers. http://stackoverflow.com/questions/11067972 - Jonathan M Davis

Actually is(f==function) checks whether or not f is a function type. The ==function part is unimportant, because f is not even a type.
Oct 07 2012
prev sibling parent Jonathan M Davis <jmdavisProg gmx.com> writes:
On Sunday, October 07, 2012 10:42:49 Timon Gehr wrote:
 On 10/07/2012 10:35 AM, Jonathan M Davis wrote:
 On Sunday, October 07, 2012 10:25:41 Tommi wrote:
 The following compiles, which I'm pretty sure must be a bug,
 right? Just checking to be sure I won't be polluting the bug
 tracker.
 
 void main()
 {
 
       auto f = (int i) {};
       static assert (!is(f == function)); // should fail
       static assert (!is(f == delegate));
 
 }

It's not a bug. is(f == function) checks for functions, not function pointers. http://stackoverflow.com/questions/11067972 - Jonathan M Davis

Actually is(f==function) checks whether or not f is a function type. The ==function part is unimportant, because f is not even a type.

Ah. That's true. I should have caught that. Regardless, the types of function pointers still won't be true for == function - e.g. is(typeof(f) == function) won't be true - because it's checking for functions, not function pointers. - Jonathan M Davis
Oct 07 2012