Почему не компилируется данный С++ код?

Есть такой код на С++ (упрощённо).

#include <iostream>

using namespace std;

class Component
{
};

template <typename T> class Storage
{
    public:
        template <typename U> U* get()
        {
            return nullptr;
        }
};

template <typename T> class Test
{
    public:
        void test()
        {
            Storage<T>().get<Component>();
        }
};

int main()
{
    Test<Component>().test();

    return 0;
}

И происходит ошибка сборки

введите сюда описание изображения

Если явно указать в методе test() используемый тип, то всё прекрасно собирается

template <typename T> class Test
{
    public:
        void test()
        {
            Storage<Component>().get<Component>();
        }
};

Не могу понять, в чем причина. Буду благодарен за любую помощь.


Ответы (1 шт):

Автор решения: user7860670

Тут необходимо указать, что зависимое (от параметров шаблона) имя get является именем шаблона Storage<T>().template get<Component>();

→ Ссылка