On Saturday, 24 December 2016 at 02:23:53 UTC, Chris Wright wrote:
Appendix A: templates that would receive 'with(import foo)' in
Phobos.
I used a relatively simple regex to look for this. If someone
put more than one line between a template and its constraints,
or comments with certain formatting, I may have missed it.
However, that would violate the phobos style guide.
This doesn't include templates that use constraints defined in
their own modules, because that module must already be parsed
and no efficiency gains could be realized.
It also omits a few cases where the module has a strong reason
to import the dependency aside from template constraints. I
believe this was only two constraints defined in std.digest,
used in one or two other modules.
algorithm/comparison.d:98:template among(values...)
experimental/typecons.d:82:private template
implementsInterface(Source,
Targets...)
experimental/typecons.d:94: template implementsInterface()
experimental/typecons.d:126:private template
implementsInterface(Source,
Targets...)
experimental/typecons.d:184:template wrap(Targets...)
experimental/typecons.d:237: template wrap(Source)
range/package.d:2069:template Take(R)
range/package.d:3501:template Cycle(R)
range/interfaces.d:277:template MostDerivedInputRange(R)
range/interfaces.d:336:template InputRangeObject(R)
numeric.d:678:template FPTemporary(F)
conv.d:3894:template octal(alias decimalInteger)
utf.d:1136:package template codeUnitLimit(S)
typecons.d:1779:private mixin template RebindableCommon(T, U,
alias This)
typecons.d:1838:template Rebindable(T)
typecons.d:4239:template wrap(Targets...)
typecons.d:4252: template wrap(Source)
typecons.d:4412:template wrap(Targets...)
typecons.d:4429:template unwrap(Target)
typecons.d:4461:template unwrap(Target)
format.d:657:template FormatSpec(Char)
algorithm/iteration.d:1055:template filter(alias predicate) if
(is(typeof
(unaryFun!predicate)))
internal/math/biguintcore.d:81:template maxBigDigits(T) if
(isIntegral!T)
meta.d:248:package template OldAlias(T) if (!isAggregateType!T
|| is
(Unqual!T == T))
meta.d:254:package template OldAlias(T) if (isAggregateType!T
&& !is
(Unqual!T == T))
utf.d:3542:template byUTF(C) if (isSomeChar!C)
Appendix B: templates that would need to be extracted out in
phobos, if parsing their modules cost a non-negligible amount
of time.
std.meta:
allSatisfy
anySatisfy
ApplyLeft
std.range.primitives:
hasSlicing
isInputRange
isInfinite
std.traits:
isAggregateType
isAssociativeArray
isDynamicArray
isFloatingPoint
isImplicitlyConvertible
isIntegral
isMutable
isSomeChar
There are a lot of templates in Phobos that never use the
template keyword. The proposal doesn't only apply to constraints,
it applies to the whole declaration.