如何解决在匿名结构中声明的函数的名称解析
在A
定义的参数列表中的以下代码中,B
,C
,f
的名称解析应适用吗?
namespace ns
{
struct A {};
struct S
{
struct B {};
struct
{
struct C {};
void f(A,B,C);
} x;
};
}
#include <type_traits>
void std::type_identity_t<decltype(ns::S::x)>::f(A,C) {}
int main()
{
}
实际上是works,最新clang
。
解决方法
[basic.lookup.unqual] / 8 对于类
board SerDes lanes topology details: | Lane # | Speed | Type | -------------------------------- | 0 | 5 | PCIe0 | | 1 | 5 | PCIe1 | | 2 | 5 | PCIe2 | | 3 | 5 | PCIe3 | | 4 | 5 | USB3 HOST0 | | 5 | 5 | USB3 HOST1 | -------------------------------- hws_serdes_topology_verify: Warning: serdes lane 2 is set to type PCIe2. hws_serdes_topology_verify: Maximum supported lanes are already set to this type (limit = 4) hws_update_serdes_phy_selectors: SerDes lane #2 is disabled hws_serdes_topology_verify: Warning: serdes lane 3 is set to type PCIe3. hws_serdes_topology_verify: Maximum supported lanes are already set to this type (limit = 4) hws_update_serdes_phy_selectors: SerDes lane #3 is disabled board SerDes lanes topology details: | Lane # | Speed | Type | -------------------------------- | 0 | 5 | PCIe0 | | 1 | 5 | PCIe1 | | 4 | 5 | USB3 HOST0 | | 5 | 5 | USB3 HOST1 | --------------------------------
的成员,在类成员的定义中使用了...的名称,而不是{ {1}}在成员的 declarator-id (24)之后,应通过以下方式之一进行声明:
...
(8.2)—应为X
类的成员...,或
(8.3)—如果X
是类X
(11.4.10)的嵌套类,则应是X
的成员,...或
...
(8.5)—如果Y
是命名空间Y
的成员,或者是X
成员的类的嵌套类,...在使用名称之前,...在命名空间N
或N
的其中一个命名空间中。脚注24)也就是说,例如以 parameter-declaration-clause 或 noexcept-specifier 中的类型出现的不合格名称。 / p>
这里N
是N
,X
是decltype(ns::S::x)
,Y
是S
。因此,可以通过(8.5)找到N
,通过(8.3)找到ns
,通过(8.2)找到A
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。