isSameType

Whether the given types are the same type.

All this does is is(T == U), so most code shouldn't use it. It's intended to be used in conjunction with templates that take a template predicate - such as those in phobos.sys.meta.

The single-argument overload makes it so that it can be partially instantiated with the first argument, which will often be necessary with template predicates.

  1. eponymoustemplate isSameType(T, U)
    enum isSameType (
    T
    U
    )
  2. template isSameType(T)

Examples

static assert( isSameType!(long, long));
static assert(!isSameType!(long, const long));
static assert(!isSameType!(long, string));
static assert( isSameType!(string, string));

int i;
real r;
static assert( isSameType!(int, typeof(i)));
static assert(!isSameType!(int, typeof(r)));

static assert(!isSameType!(real, typeof(i)));
static assert( isSameType!(real, typeof(r)));

// Partial instantiation allows it to be used with templates that expect
// a predicate that takes only a single argument.
import phobos.sys.meta : AliasSeq, indexOf;
alias Types = AliasSeq!(float, string, int, double);
static assert(indexOf!(isSameType!int, Types) == 2);

See Also

Meta