On Monday, 1 July 2013 at 18:15:06 UTC, Ali Çehreli wrote:
I think main's second line used to work:
template isSmall(T)
{
enum isSmall = (T.sizeof < 12345);
}
void main()
{
static assert(isSmall!int); // <-- the usual
syntax works
static assert(isSmall!int.isSmall); // <-- compilation
ERROR
}
Error: template deneme.isSmall does not match any function
template declaration. Candidates are:
deneme.isSmall(T)
Error: template deneme.isSmall(T) cannot deduce template
function from argument types !()(bool)
Am I imagining it? I don't have a problem with it. :) Was the
change intentional?
Ali
I think that this probably worked as early as in the end of 2011
but I can be wrong as don't remember exactly.
It seems that dmd recognizes isSmall!int.isSmall as potential
UFCS property, converts isSmall!int to bool and tries to issue
call isSmall(bool) and fails, because that template does not
define any function.