Как проверить, является ли псевдоним шаблоном в D 2.0?
template isTemplate(alias T)
{
enum bool isTemplate = ???;
}
Обновление:
Он должен работать следующим образом:
struct S(T)
{
int opCall() { return 0; }
int opUnary(string s)() if (s == "-") { return 0; }
}
pragma(msg, isTemplate!(S)); //Should print true
pragma(msg, isTemplate!(S!(int))); //Should print false
pragma(msg, isTemplate!((S!(int)).opCall)); //Should print false
pragma(msg, isTemplate!((S!(int)).opUnary)); //Should print true
Для справки, вещи, которые не работа:
Вы не можете использовать любое выражение вроде T! (...)
, потому что не знаете, что поставить вместо эллипсов.
Вы не можете скажем & T
, потому что это также не работает, если вам просто дано простое старое имя типа.