[Issue 7838] Give some error messages for wrong ranges

2021-03-16 Thread d-bugmail--- via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=7838

RazvanN  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 CC||razvan.nitu1...@gmail.com
 Resolution|--- |LATER

--- Comment #5 from RazvanN  ---
The problem with this is that it might brake code that implements some of the
range functions but doesn't care about the others. Also, I don't think
identifying why an entity is not a range is that problematic. Since this issue
is rather old and people have not been complaining about this, I will close as
LATER. If this comes up again, please reopen.

--


[Issue 7838] Give some error messages for wrong ranges

2012-04-06 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=7838



--- Comment #2 from bearophile_h...@eml.cc 2012-04-06 10:09:17 PDT ---
(In reply to comment #1)
 My understanding is that you would usually put a static assert with
 isInputRange, or a more specific template from std.range immediately after the
 struct.

This is an example program:


import std.range, std.bigint;
struct Powers {
int m;
BigInt n;
this(int m_) { this.m = m_; }
const bool empty = false;
BigInt front() { return n ^^ m; }
void popFront() { n += 1; }
}
static assert(isInputRange!Powers);
void main() {}


If I compile it with DMD 2.059beta:

...dmd -property -run temp.d
temp.d(10): Error: static assert  (isInputRange!(Powers)) is false


So it gives me no hint where the problem is. A built-in error message is
supposed to be more precise.

As alternative, maybe there is a way to add focused error messages inside a
isInputRangeVerify template to be used to verify that  an input range is
correct, that uses pragma(msg) or better ctWriteln.


 How is DMD supposed to know that that struct is suppose to be a range
 otherwise?

I see, it's a problem.
So here we are talking more about a probabilistic compiler tip. If the
class/struct contains a popFront and front and empty methods then the
programmer probably meants it to be a range.

Thank you for your answer.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 7838] Give some error messages for wrong ranges

2012-04-06 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=7838



--- Comment #3 from Matt Peterson revcompg...@gmail.com 2012-04-06 10:47:21 
PDT ---
Yeah, I think the best solution is to add verifyInputRange etc. templates to
std.range, where each criteria is checked by a separate static assert. It's
just a little ugly because there will end up being nearly duplicate templates
for all the different range types.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 7838] Give some error messages for wrong ranges

2012-04-06 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=7838



--- Comment #4 from bearophile_h...@eml.cc 2012-04-06 11:06:31 PDT ---
(In reply to comment #3)
 It's just a little ugly because there will end up being nearly
 duplicate templates for all the different range types.

I think putting such test code inside DMD itself doesn't reduce the overall
complexity a lot...

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 7838] Give some error messages for wrong ranges

2012-04-05 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=7838


Matt Peterson revcompg...@gmail.com changed:

   What|Removed |Added

 CC||revcompg...@gmail.com


--- Comment #1 from Matt Peterson revcompg...@gmail.com 2012-04-05 19:42:00 
PDT ---
My understanding is that you would usually put a static assert with
isInputRange, or a more specific template from std.range immediately after the
struct. How is DMD supposed to know that that struct is suppose to be a range
otherwise?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---