argument-dependent-lookup相关内容

如何调用与成员函数同名的内联好友函数?

如此处所述 C ++ 11样式SFINAE和模板实例化上的函数可见性类成员函数使无用函数蒙上阴影。通常使用完全限定的名称是可行的,但是我很难与其他内联声明的类的朋友函数一起使用。考虑下面的示例: 命名空间N { 结构C { 朋友int f (const C& c){ 返回1; } 朋友int g(const C& c){ return 2; } }; 结构D { voi ..

C ++ 11样式的SFINAE和模板实例化的功能可见性

我不确定这是否与sfinae有关,或者仅仅是与任何模板化功能有关的事情。我正在尝试使用sfinae基于相应自由功能的存在来启用/禁用成员功能,而后者又基于另一种类型的成员功能的存在来启用/禁用,所有都使用此处: 结构S; 模板 内联自动f(S& s,T const& t) -> decltype(t.f(s),void()) { t.f(s); } ..
发布时间:2020-06-06 19:32:50 C/C++开发

如何“使用std :: swap”启用ADL?

在这是什么示例中的复制和交换习惯: friend void swap(dumb_array&首先,dumb_array&第二个)//不添加 { //启用ADL(在我们的情况下不是必需的) ,但很好的做法)使用std :: swap; ; //通过交换两个类的成员, //这两个类被有效交换 swap(first.mSize,second.mSize); swap(fir ..
发布时间:2020-06-06 19:32:46 C/C++开发

为什么(无关紧要的)使用声明可以使重载歧义与基于参数的查找相协调?

这是问题的后续操作,此处关于具有依赖于参数的查询(ADL)的函数重载.我想检查一下我在这种情况下对规则的理解,因此编写了一些测试代码. 首先,当然,std中没有HasPtr类的交换,因此我编写了自己的命名空间,除了在全局范围中已定义的命名空间之外,该命名空间还包含交换的HasPtr版本. using声明的工作与我预期的一样-产生了歧义错误,因为已经定义了交换的HasPtr版本,如5ed中的" ..

c ++:模板中非限定名称查找的上下文

我试图参考do_run的分辨率标准,结果发现“对于使用非限定名称查找(3.4.1)或限定名称查找(3.4.3)的查找部分, 从模板定义上下文中找到了函数声明."上下文到底是什么? 在下面的示例中,do_run(int)以某种方式“隐藏" do_run(domain::mystruct),并且编译器抱怨o can't be converted to int.如果我注释掉do_run(int), ..
发布时间:2020-05-16 20:16:33 C/C++开发

找不到全局namepsace范围中的函数名称

根据在cppreference.com中进行的不合格查找: 对于函数定义中使用的名称(在其主体中或作为默认参数的一部分)(如果该函数是用户声明的名称或全局名称空间的成员),请在使用该名称的块之前进行搜索使用该名称,然后在该块开始之前搜索该封闭的块,依此类推,直到到达作为函数体的块为止. 然后搜索声明该函数的名称空间,直到使用该名称的函数的定义(不一定是声明),然后是封闭的名称空间等. ..
发布时间:2020-05-04 04:01:22 C/C++开发