小编H.W*_*Wei的帖子

为什么函数参数中的别名模板与它引用的嵌套类型不匹配?

这段代码编译

\n
template<typename T>\nstruct A {\n    struct Inner {} inner;\n    void foo(Inner in);\n};\n\ntemplate<typename T>\nvoid A<T>::foo(typename A<T>::Inner in) {\n\n}\n\nint main() {\n    A<int> a;\n    a.foo(a.inner);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

typename A<T>::Inner如果我更改为别名模板,则不会

\n
template<typename T>\nusing AInner = typename A<T>::Inner;\n\ntemplate<typename T>\nvoid A<T>::foo(AInner<T> bar) {\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

编译器抱怨说error: no declaration matches \xe2\x80\x98void A<T>::foo(AInner<T>)\xe2\x80\x99

\n

我不太熟悉别名模板的规则。他们不是同一类型吗?

\n
\n

编辑:\n这是完整的演示:

\n

// 你好.cpp

\n
template<typename T>\nstruct A {\n    struct Inner {} inner;\n    void foo(Inner in);\n};\n\ntemplate<typename T>\nusing AInner = typename A<T>::Inner;\n\ntemplate<typename T>\nvoid A<T>::foo(AInner<T> in) {\n\n}\n\nint main() {\n    A<int> a;\n    a.foo(a.inner);\n}\n …
Run Code Online (Sandbox Code Playgroud)

c++ g++ compiler-bug template-aliases

8
推荐指数
1
解决办法
96
查看次数

标签 统计

c++ ×1

compiler-bug ×1

g++ ×1

template-aliases ×1