Am Tue, 30 Aug 2016 08:57:25 +0200 schrieb Jacob Carlborg <d...@me.com>:
> On 2016-08-29 10:39, Stefan Koch wrote: > > > Thanks guys. > > > > I just came up with a nifty little patch that makes it possible to > > ensure that a function is _only_ used at ctfe. > > Or the opposite. > > > > static assert(__ctfe, "This function is not supposed to be called > > outside of ctfe"); > > and static assert(!__ctfe, "This function is not supposed to be > > called during ctfe"); > > > > similarly you can use static if (__ctfe). > > > > Is it worth trying to get it into master ? > > Wow, absolutely :) > There are some nice use cases for this: * Do not enforce @nogc for CTFE only functions, so you can mark a complete module nogc: and CTFE only functions will get ignored * Do not emit code for CTFE only functions. This is useful for bare metal programming: The CTFE only function can depend on druntime functions not available in the bare metal runtime. These are common problems when using string mixins: The functions to generate the mixed in code use string manipulation which is usually not @nogc and might require runtime functions. But the code generation function is exclusively used in CTFE.