Как проверить, является ли псевдоним шаблоном в 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
, потому что это также не работает, если вам просто дали простое старое имя типа.
__traits(allMembers, T)
фактический элемент, который будет существовать во время выполнения, или просто имя шаблона, которого может не существовать во время выполнения. Также спасибо за ссылку, но, к сожалению, она не ответила на вопрос. - person user541686   schedule 30.03.2011__traits(isTemplate, MyInstantiation)
. - person Narfanar   schedule 20.08.2016