digitalmars.D - Request: When static assert fails, display original instantiation
- Don Clugston (20/20) Nov 22 2006 Using the "sudden-death" static asserts, template libraries can now
- Kirk McDonald (9/35) Nov 23 2006 We've discussed this before, of course, and it's annoying enough that
Using the "sudden-death" static asserts, template libraries can now generate very high-quality error messages (in contrast to the garbage you usually get in C++). There's a problem, though: "sudden-death" static asserts is that they only tell you the line where the static assert is, but they normally refer to a problem where the template was instantiated from. So we get error messages like: library.d(375): (num<50), Number is too big This has been adequate for library developers, but is unusable for library users. We don't need a full template trace, just the original file and line where the first template instantiation or mixin was done from. Something like: myproject.d(20): caused static assert in: library.d(375): (num<50) is false, Number is too big Or:... library.d(375): (num<50) is false, Number is too big myproject.d(20): ultimately instantiated from here. Coupled with Oskar's recent request for a flag to re-enable template backtrace (maybe -nogag or -backtrace) for library developers, I think this would completely solve the template error message problem.
Nov 22 2006
Don Clugston wrote:Using the "sudden-death" static asserts, template libraries can now generate very high-quality error messages (in contrast to the garbage you usually get in C++). There's a problem, though: "sudden-death" static asserts is that they only tell you the line where the static assert is, but they normally refer to a problem where the template was instantiated from. So we get error messages like: library.d(375): (num<50), Number is too big This has been adequate for library developers, but is unusable for library users. We don't need a full template trace, just the original file and line where the first template instantiation or mixin was done from. Something like: myproject.d(20): caused static assert in: library.d(375): (num<50) is false, Number is too big Or:... library.d(375): (num<50) is false, Number is too big myproject.d(20): ultimately instantiated from here. Coupled with Oskar's recent request for a flag to re-enable template backtrace (maybe -nogag or -backtrace) for library developers, I think this would completely solve the template error message problem.We've discussed this before, of course, and it's annoying enough that I'm glad you've brought it up again. Here's an earlier thread on this topic: "Proposal: Treat static assert in template as instantiation error" http://www.digitalmars.com/d/archives/digitalmars/D/41749.html -- Kirk McDonald Pyd: Wrapping Python with D http://pyd.dsource.org
Nov 23 2006