On 06/24/2016 10:19 AM, Smoke Adams wrote: > We have __FUNCTION__ so, __THIS__ seems somewhat natural. Null for > outside of objects is fine.
Would the following work, where you check the first argument? import std.stdio; void Log(string filename = __FILE__, T...)(T args) { static if (is (T[0] == typeof(null))) { writefln("working without an object for %s", args[1 .. $]); } else static if (is (T[0] == class)) { writefln("working with object %s and %s", args[0], args[1 .. $]); } else { // Recurse import std.meta : AliasSeq; return Log!filename(AliasSeq!(null, args)); } } class C { } void main() { Log(42, "hello"); auto c = new C(); Log(c, "cool"); c.Log("breeze"); } The output: working without an object for 42 working with object deneme.C and cool working with object deneme.C and breeze Ali