www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Metaprogramming: check for ref

reply "mist" <none none.none> writes:
How can I:
1) check if function returns by ref
2) check if function parameters are ref
..outside of function body. Is parsing typeof(func).stringof only 
valid option?
Sep 30 2012
next sibling parent Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
On 9/30/12, mist <none none.none> wrote:
 How can I:
 1) check if function returns by ref
 2) check if function parameters are ref
 ..outside of function body. Is parsing typeof(func).stringof only
 valid option?

See ParameterStorageClassTuple in std.traits http://dlang.org/phobos/std_traits.html I'm not sure about the return type though. Maybe the template should be improved to add return type into account.
Sep 30 2012
prev sibling next sibling parent "mist" <none none.none> writes:
Thanks!
Unfortunately, return type issue is more important in my case. 
I'll check if implementation from ParameterStorageClassTuple can 
be adapted for return types though.

On Sunday, 30 September 2012 at 20:37:14 UTC, Andrej Mitrovic 
wrote:
 On 9/30/12, mist <none none.none> wrote:
 How can I:
 1) check if function returns by ref
 2) check if function parameters are ref
 ..outside of function body. Is parsing typeof(func).stringof 
 only
 valid option?

See ParameterStorageClassTuple in std.traits http://dlang.org/phobos/std_traits.html I'm not sure about the return type though. Maybe the template should be improved to add return type into account.

Sep 30 2012
prev sibling next sibling parent "jerro" <a a.com> writes:
On Sunday, 30 September 2012 at 20:51:54 UTC, mist wrote:
 Thanks!
 Unfortunately, return type issue is more important in my case. 
 I'll check if implementation from ParameterStorageClassTuple 
 can be adapted for return types though.

I think this should work: template returnsRef(alias f) { enum bool returnsRef = is(typeof( { ParameterTypeTuple!f param; auto ptr = &f(param); })); }
Sep 30 2012
prev sibling next sibling parent Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
On 9/30/12, jerro <a a.com> wrote:
 I think this should work:

 template returnsRef(alias f)
 {
      enum bool returnsRef = is(typeof(
      {
          ParameterTypeTuple!f param;
          auto ptr = &f(param);
      }));
 }

Yep. We should add this to Phobos imo.
Sep 30 2012
prev sibling next sibling parent "mist" <none none.none> writes:
Thanks!

On Sunday, 30 September 2012 at 21:20:40 UTC, jerro wrote:
 On Sunday, 30 September 2012 at 20:51:54 UTC, mist wrote:
 Thanks!
 Unfortunately, return type issue is more important in my case. 
 I'll check if implementation from ParameterStorageClassTuple 
 can be adapted for return types though.

I think this should work: template returnsRef(alias f) { enum bool returnsRef = is(typeof( { ParameterTypeTuple!f param; auto ptr = &f(param); })); }

Sep 30 2012
prev sibling parent "mist" <none none.none> writes:
On Sunday, 30 September 2012 at 21:34:36 UTC, Andrej Mitrovic 
wrote:
 On 9/30/12, jerro <a a.com> wrote:
 I think this should work:

 template returnsRef(alias f)
 {
      enum bool returnsRef = is(typeof(
      {
          ParameterTypeTuple!f param;
          auto ptr = &f(param);
      }));
 }

Yep. We should add this to Phobos imo.

Was pull request fired for this? I'd like to subscribe to get noticed when this will be in the phobos. If not, would you mind if I add one?
Oct 03 2012