<div dir="ltr">__FILE_FULL_PATH__ is broken (doesn't work with optional parameters): <a href="https://issues.dlang.org/show_bug.cgi?id=16640">https://issues.dlang.org/show_bug.cgi?id=16640</a><div>Although this bug should be fixed, I think there's something better:<br><div><div><br></div><div>How about introduce instead a __DIR__ trait which is equal to the absolute path of current directory during compilation.</div><div><br></div><div>Advantages:</div><div><br></div><div>* no need to change function signatures:</div><div><br></div><div>void fun(int arg0, string file=__FILE__, int line=__LINE__){</div><div>  enum file_full_path=buildPath(__DIR__, file);</div><div>  // file_full_path can be used at compile time if needed</div><div>}</div><div><br></div><div>instead of changing to:</div><div><div>void fun(int arg0, string file= __FILE_FULL_PATH__, int line=__LINE__){ ...}</div><div><br></div><div><br></div></div><div>* more flexible: we can have both __FILE__ and it's absolute version</div><div><br></div><div>* smaller binaries (no need to store redundant path information in __FILE_FULL_PATH__ when __DIR__ + __FILE__ is enough)</div><div><br></div><div>__FILE_FULL_PATH__ can be put in deprecation path</div></div><div><br></div><div>NOTE: there is areal use case for having a full path available [see see associated discussion in pull <a href="https://github.com/dlang/dmd/pull/5959">https://github.com/dlang/dmd/pull/5959</a>], the one proposed here (__DIR__) is less intrusive: function signature doesn't change, but implementation can add __DIR__ to get absolute path when needed.</div><div><br></div><div><br></div></div></div>