Próbuję użyć dyrektywy using
, aby wprowadzić deklarację dostępu klasy pochodnej o nazwie public
w wewnętrznym szablonie klasy deklarowanym w bazie. Kod:Tworzenie prywatnego dziedziczonego szablonu wewnętrznego za pomocą dyrektywy używającej
template <typename T>
class Base
{
public:
template<typename U>
struct Inner;
};
template<typename T>
class Derived: private Base<T>
{
public:
using typename Base<T>::template Inner; // make it visible
Inner<T>* ptr; // no need for typename here, non-qualified name
};
int main() {}
Ani g ++ ani brzęk ++ skompilować ten kod, zarówno narzekają
error: expected unqualified-id before 'template'
O ile mi wiadomo, Inner
jest zależne nazwa szablonu, więc należy używać ::template
badając jego nazwę, a także typename
wcześniej, ponieważ Base<T>::Inner
jest typem zależnym. Próbowałem wszystkich możliwych kombinacji z/bez typename/template
i nie kompilowałem. Czy istnieje sposób użycia Inner
w sekcji public
z Derived
?
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#109 –
@ T.C.. "można zapisać za pomocą' -> szablonu' "? – Barry
@Barry Należy zauważyć, że oryginalny przykład w tym wydaniu dotyczył szablonu funkcji członka. –