module imports.template_ovs2;

/***************************************************/
// https://issues.dlang.org/show_bug.cgi?id=1900
// template overload set

auto foo1900a(T)(T arg) if (is(T : const(char)[])) { return 2; }
auto foo1900b(int num) { return 1; }

auto bar1900a(T)(T arg) if (is(T : const(char)[])) { return 2; }
auto bar1900b(T)(T arg) if (is(T : double)) { return 1; }

auto baz1900(T)(T arg) if (is(T : Object)) { return 3; }
auto baz1900(T)(T arg) if (is(T : const(char)[])) { return 4; }

auto bad1900(string op)() if (op == "++") { return 2; }

mixin template Mix1900_B()
{
    auto mixfooa(T)(T) { return 2; }
    auto mixfoob() { return 1; }

    mixin Mix1900_SubB;
}

mixin template Mix1900_SubB()
{
    auto mixsubfooa(T)(T) { return 2; }
    auto mixsubfoob() { return 1; }
}

auto merge1900(T)(string)
{
    return 2;
}

/***************************************************/
// https://issues.dlang.org/show_bug.cgi?id=1900

class BClass1900 {}
template Traits1900(T : BClass1900) { enum name = "BClass"; }
string func1900(BClass1900 b) { return "BClass"; }

void Value1900a() {}
template Value1900a(T) if (is(T == string)) { enum Value1900a = 2; }

template Value1900b(T) if (is(T == string)) { enum Value1900b = 2; }
void Value1900b() {}

/***************************************************/
// https://issues.dlang.org/show_bug.cgi?id=8352

void remove8352a(in char[] name) {}
Range remove8352b(alias pred, Range)(Range range) { return range; }

/***************************************************/
// https://issues.dlang.org/show_bug.cgi?id=10658

template Val10658(long n) { enum Val10658 = 2; }
