#include <iostream>
namespace X
{
struct Y {};
template <typename, int, typename> void foo(Y)
{
std::cout << "This is X::foo\n";
}
}
X::Y abc;
template <int> void foo(); // Removing this line breaks it
int main()
{
foo<int, 4, char>(abc);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKbmFtZXNwYWNlIFgKewoJc3RydWN0IFkge307Cgl0ZW1wbGF0ZSA8dHlwZW5hbWUsIGludCwgdHlwZW5hbWU+IHZvaWQgZm9vKFkpCgl7CgkJc3RkOjpjb3V0IDw8ICJUaGlzIGlzIFg6OmZvb1xuIjsKCX0KfQoKWDo6WSBhYmM7Cgp0ZW1wbGF0ZSA8aW50PiB2b2lkIGZvbygpOyAgIC8vIFJlbW92aW5nIHRoaXMgbGluZSBicmVha3MgaXQKCmludCBtYWluKCkKewogICAgZm9vPGludCwgNCwgY2hhcj4oYWJjKTsKfQ==