Your test1 template takes three concrete (non-default) arguments. You are instantiating the template using only two arguments.
Code:
template<typename test10, typename test11, typename test12>
bool test1(test10&, const test11&, const test12& = test0::test1)
{
}

int main(void)
{
    int x = 0;
    test1(x, 0, true);  // this works
}
This compiles fine with Comeau.

Regards,