Issuing compile-time warnings with line numbers?

Jonathan M Davis jmdavisProg at gmx.com
Tue Sep 20 17:44:56 PDT 2011


On Tuesday, September 20, 2011 17:18 Andrej Mitrovic wrote:
> Won't compile for obvious reasons:
> 
> struct Bar { }
> struct Foo
> {
> this(Bar bar, int line = __LINE__)
> {
> pragma(msg, "Warning: Constructing Foo with Bar incurs
> precision loss. Line: " ~ line);
> }
> }
> 
> void main()
> {
> auto foo = Foo(Bar());
> }
> 
> That's just an example, but I want to issue a compile-time warning
> when a specific ctor is called because it might incur precision loss.
> I want to give the user the line number of the call, but I can't call
> to!string since it's not ctfe-able, so do I have any other options?

Not really. That's why the "scheduled for deprecation" messages don't ever use 
line numbers. They can only give the line that pragma is on. If the function 
were templated and took the line number as a template (resulting in a new 
instantiation each time that the function was called), then you could use the 
line number in the template, but that would be the closest that you could get 
to having a message per call.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list