模板化 class 中的嵌套 class 用于模板化函数语法错误

Nested class in templated class used in templated function syntax error

假设我有以下内容:

template<typename T>
    struct Foo
    {
    public:
        class Bar
        {           
        };
    };

如果我再定义函数

template <typename T>
void func(Foo<T>::Bar g) { }

我收到一个错误: 语法错误:标识符 'Bar'

为什么会出现错误,如何解决才能使用模板函数。

使用

template <typename T>
void func( typename Foo<T>::Bar g ) { }

否则编译器不会将构造 Foo<T>::Bar 视为类型说明符,而是将其视为表达式。