digitalmars.D - Template specializations in unittest blocks
- Jeffrey Tsang (7/7) Jun 08 2015 The following works:
- Timon Gehr (2/9) Jun 08 2015 No good reason. DMD doesn't let local symbols overload against each othe...
- Steven Schveighoffer (9/16) Jun 08 2015 To expand on what Timon said, a unittest block is actually a function
- Jeffrey Tsang (3/24) Jun 08 2015 OK, that makes much more sense. Thanks.
The following works: enum foo(int x) = x + foo!(x - 1); enum foo(int x : 0) = 0; enum bar(T) = cast(T) 3; enum bar(T : int) = 4; Wrap it in a unittest{}, and complaints about multiply defined templates hit. Is there a reason for this?
Jun 08 2015
On 06/08/2015 08:10 PM, Jeffrey Tsang wrote:The following works: enum foo(int x) = x + foo!(x - 1); enum foo(int x : 0) = 0; enum bar(T) = cast(T) 3; enum bar(T : int) = 4; Wrap it in a unittest{}, and complaints about multiply defined templates hit. Is there a reason for this?No good reason. DMD doesn't let local symbols overload against each other.
Jun 08 2015
On 6/8/15 2:10 PM, Jeffrey Tsang wrote:The following works: enum foo(int x) = x + foo!(x - 1); enum foo(int x : 0) = 0; enum bar(T) = cast(T) 3; enum bar(T : int) = 4; Wrap it in a unittest{}, and complaints about multiply defined templates hit. Is there a reason for this?To expand on what Timon said, a unittest block is actually a function under the hood. Try the same thing inside a function and you will get the same issue. Do this instead (outside of the unit test block): version(unittest) { ... // same thing } -Steve
Jun 08 2015
On Monday, 8 June 2015 at 18:22:49 UTC, Steven Schveighoffer wrote:On 6/8/15 2:10 PM, Jeffrey Tsang wrote:OK, that makes much more sense. Thanks.The following works: enum foo(int x) = x + foo!(x - 1); enum foo(int x : 0) = 0; enum bar(T) = cast(T) 3; enum bar(T : int) = 4; Wrap it in a unittest{}, and complaints about multiply defined templates hit. Is there a reason for this?To expand on what Timon said, a unittest block is actually a function under the hood. Try the same thing inside a function and you will get the same issue. Do this instead (outside of the unit test block): version(unittest) { ... // same thing } -Steve
Jun 08 2015