Thread overview | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
March 03, 2011 [Issue 5686] New: class template error | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=5686 Summary: class template error Product: D Version: D2 Platform: Other OS/Version: Windows Status: NEW Severity: regression Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: changlon@gmail.com --- Comment #0 from changlon <changlon@gmail.com> 2011-03-02 21:04:08 PST --- test.d -------------------------- ptrdiff_t Test1( string file = __FILE__, ptrdiff_t line = __LINE__)(){ static assert( line != __LINE__ -1 ); return line ; } class Test2(string name, string file = __FILE__, ptrdiff_t line = __LINE__){ static assert( line != __LINE__ -1 ); int i = 1; this(){ } } void main(){ auto test1 = Test1(); auto test2 = new Test2!("test") ; } --------------------------------- test.d(8): Error: static assert (7 != 7) is false test.d(17): instantiated from here: Test2!("test") -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
March 03, 2011 [Issue 5686] class template error | ||||
---|---|---|---|---|
| ||||
Posted in reply to changlon | http://d.puremagic.com/issues/show_bug.cgi?id=5686 --- Comment #1 from changlon <changlon@gmail.com> 2011-03-03 00:27:11 PST --- update test case: ----------------- class Test2(string name, string file = __FILE__, ptrdiff_t line = __LINE__){ static assert( line != __LINE__ -1 ); ptrdiff_t test( string file = __FILE__, ptrdiff_t line = __LINE__)(){ static assert( line != __LINE__ -1 ); return line ; } } void main(){ auto test2 = new Test2!("test") ; test2.test ; } ------------------------------- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
March 03, 2011 [Issue 5686] class template error | ||||
---|---|---|---|---|
| ||||
Posted in reply to changlon | http://d.puremagic.com/issues/show_bug.cgi?id=5686 --- Comment #2 from Steven Schveighoffer <schveiguy@yahoo.com> 2011-03-03 06:31:04 PST --- Can you be more specific what is the problem? 7 != 7 *is* false. In the static assert line (line 8), __LINE__ should be 8, and line should be 7, since the previous line contains the declaration of line. Are you saying that __LINE__ should be the line number of the instantiation (i.e. 17)? Not sure what the intended behavior is here. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
March 03, 2011 [Issue 5686] class template error | ||||
---|---|---|---|---|
| ||||
Posted in reply to changlon | http://d.puremagic.com/issues/show_bug.cgi?id=5686 Steven Schveighoffer <schveiguy@yahoo.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |schveiguy@yahoo.com --- Comment #3 from Steven Schveighoffer <schveiguy@yahoo.com> 2011-03-03 06:36:13 PST --- (In reply to comment #2) > In the static assert line (line 8), __LINE__ should be 8, and line should be 7, since the previous line contains the declaration of line. Wow, that was confusing :) Let's call the template parameter lineno. I'll try again: In the static assert line (line 8), __LINE__ should be 8, and lineno should be 7, since the previous line contains the declaration of lineno. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
March 03, 2011 [Issue 5686] class template error | ||||
---|---|---|---|---|
| ||||
Posted in reply to changlon | http://d.puremagic.com/issues/show_bug.cgi?id=5686 --- Comment #4 from changlon <changlon@gmail.com> 2011-03-03 06:45:53 PST --- The lineno shoule be the lineno where template is be instantiated, not where it be declared . for template and function template it is working . for class template and class member template it is not working . -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
March 03, 2011 [Issue 5686] class template error | ||||
---|---|---|---|---|
| ||||
Posted in reply to changlon | http://d.puremagic.com/issues/show_bug.cgi?id=5686 --- Comment #5 from changlon <changlon@gmail.com> 2011-03-03 06:50:13 PST --- ----------------------------------- ptrdiff_t Test1( string file = __FILE__, ptrdiff_t line = __LINE__)(){ pragma(msg, line.stringof); return line ; } class Test2(string name, string file = __FILE__, ptrdiff_t line = __LINE__){ pragma(msg, line.stringof); } void main(){ auto test1 = Test1(); auto test2 = new Test2!("test") ; } --------------------------------------- compile this the dmd print 11, 7. dmd should print 11, 12 . -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
March 03, 2011 [Issue 5686] class template error | ||||
---|---|---|---|---|
| ||||
Posted in reply to changlon | http://d.puremagic.com/issues/show_bug.cgi?id=5686 --- Comment #6 from Steven Schveighoffer <schveiguy@yahoo.com> 2011-03-03 07:16:34 PST --- With some testing, I discovered that it's the act of explicit instantiation that causes the line number to be tied to the declaration line: ptrdiff_t Test1(string name, string file = __FILE__, ptrdiff_t line = __LINE__)(){ pragma(msg, line.stringof); return line ; } void main(){ auto test1 = Test1!("test")(); } prints 1. This workaround does work: Test2!(file, line) createTest2(string file = __FILE__, ptrdiff_t line = __LINE__)() { return new Test2!(file line); } I agree with the request that the line number and file should be tied to the instantiation line, not the declaration line. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
March 20, 2011 [Issue 5686] Explicit template instantiation with __FILE__ and __LINE__ associates those symbols with the declaration | ||||
---|---|---|---|---|
| ||||
Posted in reply to changlon | http://d.puremagic.com/issues/show_bug.cgi?id=5686 Don <clugdbug@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |clugdbug@yahoo.com.au Severity|regression |normal --- Comment #7 from Don <clugdbug@yahoo.com.au> 2011-03-19 18:19:11 PDT --- This isn't a regression. It didn't work in DMD2.000 either. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
March 21, 2012 [Issue 5686] Explicit template instantiation with __FILE__ and __LINE__ associates those symbols with the declaration | ||||
---|---|---|---|---|
| ||||
Posted in reply to changlon | http://d.puremagic.com/issues/show_bug.cgi?id=5686 dawg@dawgfoto.de changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |dawg@dawgfoto.de Resolution| |DUPLICATE --- Comment #8 from dawg@dawgfoto.de 2012-03-20 22:10:46 PDT --- *** This issue has been marked as a duplicate of issue 4018 *** -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation