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









Timon Gehr <timon.gehr gmx.ch> 