On Monday, 12 September 2022 at 16:14:42 UTC, Ali Çehreli wrote:
Is this accurate: Because Foo is a template, it should not put any attribute on member functions? Or only member functions that use a member that depends on a template parameter? And non-members that are templates?

Yes. Except for `@trusted`, explicit attributes on template code are a smell.

Is putting function attributes on unittest blocks for catching such issues?

@nogc nothrow pure @safe
unittest
{
    // ...
}

No, it isn't because unless my unittest code is impure, I can't catch my incorrect 'pure' etc. on my member functions.

To test that a particular piece of code *isn't* pure, you can use the following idiom:

    static assert(!__traits(compiles, () pure {
        // code to test goes here
    });

Reply via email to