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