On Wednesday, 8 August 2018 at 23:47:22 UTC, Jonathan M Davis wrote:
On Wednesday, August 8, 2018 3:54:34 PM MDT aliak via Digitalmars-d-learn wrote:
I'm trying to debug stuff, so I want to add verbose logging

struct S(T) {
   this() {
     writeln("created S(T) with properties and ID");
   }
}

static a = S!int(); // bah

I guess users can call this code from any context, but when i'd also like to see the log output for debugging purposes. Is there a way around this?

Can I maybe only do a writeln in a non compile-time context?

if(__ctfe)
{
    // code here will execute if this is encountered during CTFE
}
else
{
// code here will execute if this is encountered outside of CTFE
}

- Jonathan M Davis

That won't work because __ctfe is not readable at compile time. And I don't want that writeln there when there's compile time evaluation because errors.

1) I want to be able to log when a type is created
2) I want to declare a locally static runtime type

Ie:

import std.stdio;

struct S(T) {
    T i;
    this(T i) {
        this.i = i;
        writeln("log it");
    }
}

int f() {
    static x = S!int(3);
    return x.i++;
}

void main() {
    writeln(f); // print 3
    writeln(f); // print 4
}



Reply via email to