つまり、パラメーターを渡さずに呼び出すと、パラメーターは渡された値を取ります。
だから電話したら
IntSet* i = new Intset();
を呼び出すことと同等です
Intset* i = new IntSet(-1,-1,-1,-1)
名前のない部分について。テンプレートを使用するライブラリの一部であるためだと思います。名前のないパラメーターは使用されませんが、それらを必要とする可能性のある別のクラスの署名と一致するように存在します。それらが必要な場合は、デフォルトで -1 を渡します。例として、次のリンクをご覧ください。
http://compgroups.net/comp.lang.c++/unnamed-formal-parameter/1004784
上記のリファレンスから例をコピーして、そのような構成を有用な方法で使用するケースを作成します。
例えば
class A
{
public:
A(void* = 0) {} // unused parameter
};
class B
{
public:
B(void* p) : pp(p) {} // used parameter
private:
void* pp;
};
template <class T>
class C
{
public:
static T* create(void* p = 0) { return new T(p); }
};
int main()
{
A* a = C<A>::create();
B* b = C<B>::create("hello");
}
C::create は、A::A が使用されていなくてもパラメーターを持たない限りコンパイルされません。