[OT] Which IDE / Editor do you use?

Jonathan M Davis jmdavisProg at gmx.com
Sun Sep 15 03:53:41 PDT 2013


On Sunday, September 15, 2013 06:40:36 Nick Sabalausky wrote:
> On Sun, 15 Sep 2013 12:08:41 +0200
> 
> Jacob Carlborg <doob at me.com> wrote:
> > On 2013-09-15 02:09, Nick Sabalausky wrote:
> > > Assert? That doesn't let you trace the flow. I use this:
> > > 
> > > void trace(string file=__FILE__, size_t line=__LINE__)(string
> > > msg="trace") {
> > > 
> > >          writefln("%s(%s): %s", file, line, msg);
> > >          stdout.flush();
> > > 
> > > }
> > 
> > If you use runtime arguments you'll avoid template bloat:
> > 
> > void trace(string msg="trace", string file=__FILE__, size_t
> > line=__LINE__)
> 
> Cool, I didn't know __FILE__/__LINE__ worked as default runtime args.
> IIRC, they didn't used to (but maybe that was just in D1 where they
> didn't work as default template args either).

They have worked as default runtime arguments for quite a long time. That's 
what all the exception classes use to get their file and line number. I'm not 
aware of them ever not working as default arguments, but I never used D1, and 
I certainly don't remember all of the changes early in D2. On a related note, 
I find it very annoying that in C++, when using __FILE__ and __LINE__ as 
default arguments, it takes the declaration site rather than the call site. 
It's really a great innovation of D that they get filled in at the call site in 
D.

In any case, using __FILE__ or __LINE__ as a default template argument is 
almost always a bad idea, because it makes it so that you end up with a new 
template instantiation pretty much every time you use it, which is going to 
cause a ridiculous amount of code bloat if the template is used much at all.

- Jonathan M Davis


More information about the Digitalmars-d mailing list