Alternate name for Fields, kept for legacy compatibility.
Get the Key type of an Associative Array.
Alternate name for ParameterDefaults, kept for legacy compatibility.
Alternate name for Parameters, kept for legacy compatibility.
Returns the target type of a pointer.
Returns a AliasSeq of the template arguments used to instantiate T.
Returns a AliasSeq of the template arguments used to instantiate T.
Returns an alias to the template that T is an instance of. It will return void if a symbol without a template is given.
Returns an alias to the template that T is an instance of. It will return void if a symbol without a template is given.
Get a AliasSeq of all base classes of T, in decreasing order, followed by T's interfaces. TransitiveBaseTypeTuple!Object yields the empty type tuple.
Get the Value type of an Associative Array.
Alternate name for isExpressions, kept for legacy compatibility.
Returns the FunctionAttribute mask for function func.
Get a tuple of the storage classes of a function's parameters.
Determines what kind of variadic parameters function has.
* Get the fully qualified name of a type or a symbol. Can act as an intelligent type/symbol to string converter.
Yields true if and only if T is an aggregate that defines a symbol called name.
Determine if a symbol has a given user-defined attribute.
Detect whether S is an abstract class.
Detect whether S is an abstract function.
Returns true iff a value of type Rhs can be assigned to a variable of type Lhs.
Determines whether the type S can be copied. If a type cannot be copied, then code such as MyStruct x; auto y = x; will fail to compile. Copying for structs can be disabled by using @disable this(this).
Detect whether S is a final class.
Detect whether S is a final function.
Returns true iff an lvalue of type Rhs can be assigned to a variable of type Lhs.
Returns true iff an rvalue of type Rhs can be assigned to a variable of type Lhs.
Detect whether X is a type. Analogous to is(X). This is useful when used in conjunction with other templates, e.g. allSatisfy!(isType, X).
Check whether the tuple T is a type tuple. A type tuple only contains types.
Returns the mangled name of symbol or type sth.
Select one of two functions to run via template parameter.
Select one of two functions to run via template parameter.
Creates an lvalue or rvalue of type T for typeof(...) and __traits(compiles, ...) purposes. No actual value is returned.
Creates an lvalue or rvalue of type T for typeof(...) and __traits(compiles, ...) purposes. No actual value is returned.
Get a AliasSeq of all base classes of this class, in decreasing order. Interfaces are not included. BaseClassesTuple!Object yields the empty type tuple.
Get a AliasSeq of the base class and base interfaces of this class or interface. BaseTypeTuple!Object returns the empty type tuple.
Get the type that all types can be implicitly converted to. Useful e.g. in figuring out an array type from a bunch of initializing values. Returns void if passed an empty list, or if the types have no common type.
Returns the type of ToType with the "constness" of FromType. A type's constness refers to whether it is const, immutable, or inout. If FromType has no constness, the returned type will be the same as ToType.
Copies type qualifiers from FromType to ToType.
The parameter type deduced by IFTI when an expression of type T is passed as an argument to a template function.
Retrieves the members of an enumerated type enum E.
Get as an expression tuple the names of the fields of a struct, class, or union. This consists of the fields that take up memory space, excluding the hidden fields like the virtual function table pointer or a context pointer for nested types. Inherited fields (for classes) are not included. If T isn't a struct, class, interface or union, an expression tuple with an empty string is returned.
Get as a tuple the types of the fields of a struct, class, or union. This consists of the fields that take up memory space, excluding the hidden fields like the virtual function table pointer or a context pointer for nested types. If T isn't a struct, class, interface or union returns a tuple with one element T.
Returns the inferred type of the loop variable when a variable of type T is iterated over using a foreach loop with a single loop variable and automatically inferred return type. Note that this may not be the same as std.range.ElementType!Range in the case of narrow strings, or if T has both opApply and a range interface.
Get the function type from a callable object func, or from a function pointer/delegate type.
Returns the largest type, i.e. T such that T.sizeof is the largest. If more than one type is of the same size, the leftmost argument of these in will be returned.
Returns a tuple of non-static functions with the name name declared in the class or interface C. Covariant duplicates are shrunk into the most derived one.
Strips off all enums from type T.
Get, as a tuple, the default values of the parameters to a function symbol. If a parameter doesn't have the default value, void is returned instead.
Get, as a tuple, the identifiers of the parameters to a function symbol.
Get a tuple of the storage classes of a function's parameters.
Get, as a tuple, the types of the parameters to a function, a pointer to function, a delegate, a struct with an opCall, a pointer to a struct with an opCall, or a class with an opCall.
Get the type that a scalar type T will promote to in multi-term arithmetic expressions.
Gives a template that can be used to apply the same attributes that are on the given type T. E.g. passing inout shared int will return SharedInoutOf.
Get the primitive types of the fields of a struct or class, in topological order.
Get the type of the return value from a function, a pointer to function, a delegate, a struct with an opCall, a pointer to a struct with an opCall, or a class with an opCall. Please note that $(D_KEYWORD ref) is not part of a type, but the attribute of the function (see template functionAttributes).
Aliases itself to T[0] if the boolean condition is true and to T[1] otherwise.
Constructs a new function or delegate type with the same basic signature as the given one, but different attributes (including linkage).
Constructs a new function or delegate type with the same basic signature as the given one, but different attributes (including linkage).
Returns the corresponding signed type for T. T must be a numeric integral type, otherwise a compile-time error occurs.
Removes const, inout and immutable qualifiers, if any, from type T.
Removes all qualifiers, if any, from type T.
Removes shared qualifier, if any, from type T.
Returns the number of arguments of function func. arity is undefined for variadic functions.
Returns class instance alignment.
Convert the result of __traits(getParameterStorageClasses) to ParameterStorageClass enums.
Returns the FunctionAttribute mask for function func.
Determine the linkage attribute of the function.
Gets the matching user-defined attributes from the given symbol.
Returns true if and only if T's representation includes at least one of the following:
True if S or any type directly embedded in the representation of S defines an elaborate assignment. Elaborate assignments are introduced by defining opAssign(typeof(this)) or opAssign(ref typeof(this)) for a struct or when there is a compiler-generated opAssign.
True if S or any type embedded directly in the representation of S defines an elaborate copy constructor. Elaborate copy constructors are introduced by defining this(this) for a struct.
True if S or any type directly embedded in the representation of S defines an elaborate destructor. Elaborate destructors are introduced by defining ~this() for a struct.
True if S or any type embedded directly in the representation of S defines elaborate move semantics. Elaborate move semantics are introduced by defining opPostMove(ref typeof(this)) for a struct.
Checks whether a function has the given attributes attached.
Returns true if and only if T's representation includes at least one of the following:
Determines whether T or any of its representation types have a context pointer.
Whether the symbol represented by the string, member, exists and is a static member of T.
Returns true if and only if T's representation includes at least one of the following:
Detect whether type T is a string that will be autodecoded.
Detect whether T is a callable object, which can be called with the function call operator $(LPAREN)...$(RPAREN).
Warning: This trait will be deprecated as soon as it is no longer used in Phobos. For a function parameter to safely accept a type that implicitly converts to string as a string, the conversion needs to happen at the callsite; otherwise, the conversion is done inside the function, and in many cases, that means that local memory is sliced (e.g. if a static array is passed to the function, then it's copied, and the resulting dynamic array will be a slice of a local variable). So, if the resulting string escapes the function, the string refers to invalid memory, and accessing it would mean accessing invalid memory. As such, the only safe way for a function to accept types that implicitly convert to string is for the implicit conversion to be done at the callsite, and that can only occur if the parameter is explicitly typed as an array, whereas using isConvertibleToString in a template constraint would result in the conversion being done inside the function. As such, isConvertibleToString is inherently unsafe and is going to be deprecated.
Determines whether the function type F is covariant with G, i.e., functions of the type F can override ones of the type G.
Detect whether type T is a dynamic array.
Check whether the tuple T is an expression tuple. An expression tuple only contains expressions.
Detect whether X is a final method or class.
Detect whether symbol or type X is a function. This is different that finding if a symbol is callable or satisfying is(X == function), it finds specifically if the symbol represents a normal function declaration, i.e. not a delegate or a function pointer.
Determines whether T is a class nested inside another class and that T.outer is the implicit reference to the outer class (i.e. outer has not been used as a field or method name)
Returns true if T is an instance of the template S.
Detect whether T is a built-in integral type. Integral types are byte, ubyte, short, ushort, int, uint, long, ulong, cent, ucent, and enums with an integral type as its base type.
Determines whether T has its own context pointer. T must be either class, struct, or union.
Determines if f is a function that requires a context pointer.
Detect whether T is a built-in numeric type (integral or floating point).
true if func is @safe or @trusted.
Detect whether T is one of the built-in character types.
true if func is @system.
Detect whether T is a built-in unsigned numeric type.
Get the module name (including package) for the given symbol.
Returns the most negative value of the numeric type T.
Get the full package name for the given symbol.
Determines what kind of variadic parameters function has.
Detect whether type T is an aggregate type.
Detect whether type T is an array (static or dynamic; for associative arrays see isAssociativeArray).
Detect whether T is an associative array type
Detect whether T is a basic type (scalar type or void).
Detect whether T is a built-in boolean type or enum of boolean base type.
Detect whether type T is a builtin type.
Detect whether symbol or type T is a delegate.
Detects whether T is a comparable type. Basic types and structs and classes that implement opCmp are ordering comparable.
Detect whether T is a built-in floating point type.
Detect whether symbol or type T is a function pointer.
Is From implicitly convertible to To?
Returns true if T is an instance of the template S.
Returns true if T can be iterated over using a foreach loop with a single loop variable of automatically inferred type, regardless of how the foreach loop is implemented. This includes ranges, structs/classes that define opApply with a single loop variable, and builtin dynamic, static and associative arrays.
Returns true if T is not const or immutable. Note that isMutable is true for string, or immutable(char)[], because the 'head' is mutable.
Detect whether type T is a narrow string.
Detects whether T is a comparable type. Basic types and structs and classes that implement opCmp are ordering comparable.
Detect whether type T is a pointer.
Is From qualifier-convertible to To?
Detect whether type T is a SIMD vector type.
Detect whether T is a scalar type (a built-in numeric, character or boolean type).
Detect whether T is a built-in signed numeric type.
Detect whether symbol or type T is a function, a function pointer or a delegate.
Detect whether T is one of the built-in string types.
Detect whether type T is a static array.
Templates which extract information about types and symbols at compile time.