/*
REQUIRED_ARGS: -de
TEST_OUTPUT:
---
fail_compilation/deprecations.d(43): Deprecation: struct `deprecations.S` is deprecated
fail_compilation/deprecations.d(64):        instantiated from here: `otherPar!()`
fail_compilation/deprecations.d(55): Deprecation: struct `deprecations.S` is deprecated
fail_compilation/deprecations.d(65):        instantiated from here: `otherVar!()`
fail_compilation/deprecations.d(55): Deprecation: struct `deprecations.S` is deprecated
fail_compilation/deprecations.d(65):        instantiated from here: `otherVar!()`
---
https://issues.dlang.org/show_bug.cgi?id=20474
*/
deprecated struct S {}
deprecated void foo()(S par) if (is(S == S))
{
    S var;
}
deprecated template bar()  if (is(S == S))
{
    void bar(S par)
    {
        S var;
    }
}
deprecated void foobar (T) (T par)  if (is(T == S))
{
    T inst;
}
template otherPar()
{
    deprecated void otherPar(S par)
    {
        S var;
    }
    void par(S par) {}
}
template otherVar()
{
    deprecated void otherVar(S par)
    {
        S var;
    }
    void var()
    {
        S var;
    }
}
deprecated void main()
{
    foo(S.init);
    bar(S.init);
    foobar(S.init);
    otherPar(S.init);
    otherVar(S.init);
}