I feel like we really need parametric attributes...
I constantly have situations like this:
void f(CallbackFun cb) { cb(); }
Where the attribute-ness of a function depends on the attribute-ness of the callback.
I want my function to be @nogc, but I don't want to require the user supply a @nogc callback to use my API.
If we're going to have all these attributes, then we really need something like this:
This applies to the classic suite of attributes.
The trouble with this, obviously, is; how do you mangle this function? It's not a template... so...?
That problem feels loosely related to `inout`, which is an innovative hack... I wonder if some generalisation of that concept could be satisfying here, while also satisfying the actual input case (allowing to delete `inout` from the language)...?
It's a whole category of problem that needs some expression... where the attribute-ness of a declaration is dependent on the attribute-ness of some facet of the declaration; and where the declaration is not a template.