// REQUIRED_ARGS: -m64
/*
TEST_OUTPUT:
---
fail_compilation/fail238_m64.d(21): Error: cannot implicitly convert expression `"a"` of type `string` to `ulong`
fail_compilation/fail238_m64.d(24): Error: cannot implicitly convert expression `X!()` of type `void` to `const(string)`
fail_compilation/fail238_m64.d(29): Error: template instance `fail238_m64.A!"a"` error instantiating
fail_compilation/fail238_m64.d(35):        instantiated from here: `M!(q)`
fail_compilation/fail238_m64.d(35):        while evaluating `pragma(msg, M!(q))`
---
*/

// https://issues.dlang.org/show_bug.cgi?id=581
// Error message w/o line number in dot-instantiated template
template X(){}

template D(string str){}

template A(string str)
{
    static if (D!(str[str]))
    {}
    else
        const string A = .X!();
}

template M(alias B)
{
    const string M = A!("a");
}

void main()
{
    int q = 3;
    pragma(msg, M!(q));
}
