Non-consistent implicit function template specializations
Ali Çehreli
acehreli at yahoo.com
Wed Aug 18 16:07:27 UTC 2021
On 8/18/21 4:10 AM, Rekel wrote:
>> isArray!T && (isArray!(ElementType!T))
>
> I tried looking into how isArray is defined. Like, does being able to
> index mean it's an array, or are these only static &/or dynamic arrays?
The definitions are in phobos/std/traits.d
enum bool isArray(T) = isStaticArray!T || isDynamicArray!T;
isStaticArray uses the compiler's __traits feature:
enum bool isStaticArray(T) = __traits(isStaticArray, T);
isDynamicArray uses the is expression but apparently has some history:
template isDynamicArray(T)
{
static if (is(T == U[], U))
enum bool isDynamicArray = true;
else static if (is(T U == enum))
// BUG: isDynamicArray / isStaticArray considers enums
// with appropriate base types as dynamic/static arrays
// Retain old behaviour for now, see
// https://github.com/dlang/phobos/pull/7574
enum bool isDynamicArray = isDynamicArray!U;
else
enum bool isDynamicArray = false;
}
Ali
More information about the Digitalmars-d-learn
mailing list