c++templatesdefault-argumentsclass-templatectad

How do I avoid specifying arguments for a class template that has default template arguments?


If I am allowed to do the following:

template <typename T = int>
class Foo{
};

why am I not allowed to do the following in a place like main:

Foo me;

but must instead specify the following?

Foo<int> me;

C++11 introduced default template arguments, and, right now, I'm finding them difficult to fully understand.


Solution

  • Note:

    Foo me; without template arguments is legal as of C++17. See this answer: https://stackoverflow.com/a/50970942/539997.

    Original answer applicable before C++17:

    You have to do:

    Foo<> me;
    

    The template arguments must be present but you can leave them empty.

    Think of it like a function foo with a single default argument. The expression foo won't call it, but foo() will. The argument syntax must still be there. This is consistent with that.