patterncppCritical
Use 'class' or 'typename' for template parameters?
Viewed 0 times
typenameclassusefortemplateparameters
Problem
Possible Duplicate:
What is the difference between "typename" and "class" template parameters?
When defining a function template or class template in C++, one can write this:
or one can write this:
Is there a good reason to prefer one over the other?
I accepted the most popular (and interesting) answer, but the real answer seems to be "No, there is no good reason to prefer one over the other."
Note, however, that before C++17 in the case of template template parameters, use of
What is the difference between "typename" and "class" template parameters?
When defining a function template or class template in C++, one can write this:
template ...or one can write this:
template ...Is there a good reason to prefer one over the other?
I accepted the most popular (and interesting) answer, but the real answer seems to be "No, there is no good reason to prefer one over the other."
- They are equivalent (except as noted below).
- Some people have reasons to always use
typename.
- Some people have reasons to always use
class.
- Some people have reasons to use both.
- Some people don't care which one they use.
Note, however, that before C++17 in the case of template template parameters, use of
class instead of typename was required. See user1428839's answer below. (But this particular case is not a matter of preference, it was a requirement of the language.)Solution
Stan Lippman talked about this here. I thought it was interesting.
Summary: Stroustrup originally used
Summary: Stroustrup originally used
class to specify types in templates to avoid introducing a new keyword. Some in the committee worried that this overloading of the keyword led to confusion. Later, the committee introduced a new keyword typename to resolve syntactic ambiguity, and decided to let it also be used to specify template types to reduce confusion, but for backward compatibility, class kept its overloaded meaning.Context
Stack Overflow Q#213121, score: 453
Revisions (0)
No revisions yet.