template <typename blah>
class MyTemplateBaseClass
{
public:
typedef blah my_blah_typedef;
};
template <typename arg>
class DerivedFromTemplated : private MyTemplateBaseClass<arg>
{
public:
//Either giving the full name:
typename MyTemplateBaseClass<arg>::my_blah_typedef GetBlahType()
{
return typename MyTemplateBaseClass<arg>::my_blah_typedef();
}
//Or typedef-ing it locally:
typedef typename MyTemplateBaseClass<arg>::my_blah_typedef my_blah_typedef;
my_blah_typedef GetBlahType2()
{
return my_blah_typedef();
}
};
int main()
{
DerivedFromTemplated<int> test;
}
CnRlbXBsYXRlIDx0eXBlbmFtZSBibGFoPgpjbGFzcyBNeVRlbXBsYXRlQmFzZUNsYXNzCnsKICAgIHB1YmxpYzogCiAgICB0eXBlZGVmIGJsYWggbXlfYmxhaF90eXBlZGVmOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIGFyZz4KY2xhc3MgRGVyaXZlZEZyb21UZW1wbGF0ZWQgOiBwcml2YXRlIE15VGVtcGxhdGVCYXNlQ2xhc3M8YXJnPgp7CnB1YmxpYzoKICAgIC8vRWl0aGVyIGdpdmluZyB0aGUgZnVsbCBuYW1lOgogICAgdHlwZW5hbWUgTXlUZW1wbGF0ZUJhc2VDbGFzczxhcmc+OjpteV9ibGFoX3R5cGVkZWYgR2V0QmxhaFR5cGUoKQogICAgewogICAgICAgIHJldHVybiB0eXBlbmFtZSBNeVRlbXBsYXRlQmFzZUNsYXNzPGFyZz46Om15X2JsYWhfdHlwZWRlZigpOwogICAgfQoKICAgIC8vT3IgdHlwZWRlZi1pbmcgaXQgbG9jYWxseToKICAgIHR5cGVkZWYgdHlwZW5hbWUgTXlUZW1wbGF0ZUJhc2VDbGFzczxhcmc+OjpteV9ibGFoX3R5cGVkZWYgbXlfYmxhaF90eXBlZGVmOwogICAgbXlfYmxhaF90eXBlZGVmIEdldEJsYWhUeXBlMigpIAogICAgewogICAgICAgIHJldHVybiBteV9ibGFoX3R5cGVkZWYoKTsKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgRGVyaXZlZEZyb21UZW1wbGF0ZWQ8aW50PiB0ZXN0Owp9