Specialization - Major hole in the spec?
Peter Alexander
peter.alexander.au at gmail.com
Thu Jan 5 15:22:07 PST 2012
On 5/01/12 9:37 PM, Trass3r wrote:
> On Thursday, 5 January 2012 at 15:11:13 UTC, Timon Gehr wrote:
>> On 01/05/2012 10:14 AM, Peter Alexander wrote:
>>> In any case, it is surely a bug. I have *explicitly* specified that T
>>> must be int, yet it has called a version with T == float.
>>
>> No it has called a version with T : float. ":" means "implicitly
>> converts to". This is by design.
>
> I think we should rename this to something like 'type constraint'
> instead of specialization (and add the explanation that it means
> implicitly converts). As this thread shows C++ programmers will be
> confused otherwise.
Upon further investigation, the website disagrees with what you've said.
http://dlang.org/templates-revisited.html
------------------------------------------------------------------------
Each can have default values, and type parameters can have (a limited
form of) constraints:
class B { ... }
interface I { ... }
class Foo(
R, // R can be any type
P:P*, // P must be a pointer type
T:int, // T must be int type
S:T*, // S must be pointer to T
C:B, // C must be of class B or derived
// from B
U:I, // U must be a class that
// implements interface I
string str = "hello",
// string literal,
// default is "hello"
alias A = B // A is any symbol
// (including template symbols),
// defaulting to B
)
{
...
}
------------------------------------------------------------------------
On the T:int line it says "T must be int type", not "T must implicitly
convert to int".
Where did you read that : means implicitly converts to? I can't find it
anywhere on the site, or in TDPL.
More information about the Digitalmars-d
mailing list