3 ms·
It's not about making compiler implementations easier -- it's about protecting template authors against having someone write: class MyBadClass { stat
by haberman 17y ago
It's not about making compiler implementations easier -- it's about protecting template authors against having someone write:
class MyBadClass {
static int bar;
};
foo<MyBadClass> y;
By writing "typename", the template author can indicate that "T::bar" the template author can indicate that "bar" is expected to be a type, not a variable. This is explained in more detail here: http://pages.cs.wisc.edu/~driscoll/typename.html http://pages.cs.wisc.edu/~driscoll/typename.html.
- pmjordan 17y agoYes, but my argument is that such an instantiation could easily be determined automatically. The declaration T::bar x; makes no sense under any circumstances if T::bar is not a type. Ergo, putting typename in front is redundant.
- haberman 17y agoYes but what if your declaration was: T::bar * x; Now the parse is ambiguous. While the language could say "you only need to use typename if the declaration would otherwise be ambiguous," it's simpler and more consistent to say "all qualified dependent types must use typename."