argument-dependent-lookup相关内容
以下非常简单的代码无法编译 #include #include 命名空间Foobar { struct Test { std :: string f; std :: uint16_t uuid; }; } bool运算符==(const Foobar :: Test& lhs,const Foobar :: Test&
..
是否可以采用通过ADL找到的函数的地址? 例如: template void(* get_swap())(T& ;, T&) { return& _________; //如何获取T的swap()函数的地址? } int main() { typedef some_type T; get_swap(); }
..
令人惊讶的是,以下代码可以在各种编译器和版本上编译并运行。 #include int main(){ endl(std :: cout); 返回0; } Ideone链接 它如何编译?我确信全局范围内没有 endl ,因为类似 std :: cout
..
如此处所述 C ++ 11样式SFINAE和模板实例化上的函数可见性类成员函数使无用函数蒙上阴影。通常使用完全限定的名称是可行的,但是我很难与其他内联声明的类的朋友函数一起使用。考虑下面的示例: 命名空间N { 结构C { 朋友int f (const C& c){ 返回1; } 朋友int g(const C& c){ return 2; } }; 结构D { voi
..
使用ADL在此问题之后如果传递的类型来自我们的命名空间,则可以创建一个特征来回答: #include 命名空间助手 { template struct is_member_of_sample:std :: false_type { }; 模板 struct i
..
我不确定这是否与sfinae有关,或者仅仅是与任何模板化功能有关的事情。我正在尝试使用sfinae基于相应自由功能的存在来启用/禁用成员功能,而后者又基于另一种类型的成员功能的存在来启用/禁用,所有都使用此处: 结构S; 模板 内联自动f(S& s,T const& t) -> decltype(t.f(s),void()) { t.f(s); }
..
在这是什么示例中的复制和交换习惯: friend void swap(dumb_array&首先,dumb_array&第二个)//不添加 { //启用ADL(在我们的情况下不是必需的) ,但很好的做法)使用std :: swap; ; //通过交换两个类的成员, //这两个类被有效交换 swap(first.mSize,second.mSize); swap(fir
..
有人知道为什么下一段代码没有在Clang上编译的原因4.0.1? 下一个错误: 调用函数'operator #include namespace Wrapper { template struct Q
..
代码如下: namespace Namespace { struct L0 { enum SomeEnum { EnumVal }; struct L1 { friend void f(SomeEnum) {
..
这是问题的后续操作,此处关于具有依赖于参数的查询(ADL)的函数重载.我想检查一下我在这种情况下对规则的理解,因此编写了一些测试代码. 首先,当然,std中没有HasPtr类的交换,因此我编写了自己的命名空间,除了在全局范围中已定义的命名空间之外,该命名空间还包含交换的HasPtr版本. using声明的工作与我预期的一样-产生了歧义错误,因为已经定义了交换的HasPtr版本,如5ed中的"
..
我希望对涉及ADL,名称空间和运算符重载的令人困惑的情况有所了解. 让Foo成为一个在其自己的名称空间中定义一个类(Deriv)以及返回另一个类的模板化operator *的库. namespace Foo { class Deriv {}; class Another {}; template Another operato
..
这是有问题的代码,显示在5ed的"C ++ Primer"的第13.3节中: void swap(Foo &lhs, Foo &rhs) { using std::swap; swap(lhs.h, rhs.h); // uses the HasPtr version of swap // swap other members of type Foo } 这本书提
..
我试图参考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),
..
示例 ADL 用于“注入"特定的函数/运算符,具体取决于fn/op所适用的类型. 我想知道ADL是否完全适用于全局名称空间,即是否在具体来说,这些等效的是wrt. ADL?: // 1 - at global namespace scope struct GlobalType {}; template std::basic_ostream
..
以下程序 #include #include #include namespace my_namespace { template void swap(T& a, T& b) { T tmp = std::move(a); a = std::move(b); b = std::move(tmp)
..
我试图理解为什么以下代码无法编译: namespace ns { struct S {}; } namespace alleq { inline bool operator==(const ns::S &, const ns::S &) { return true; } } namespace ns { using namespace alleq; /
..
根据在cppreference.com中进行的不合格查找: 对于函数定义中使用的名称(在其主体中或作为默认参数的一部分)(如果该函数是用户声明的名称或全局名称空间的成员),请在使用该名称的块之前进行搜索使用该名称,然后在该块开始之前搜索该封闭的块,依此类推,直到到达作为函数体的块为止. 然后搜索声明该函数的名称空间,直到使用该名称的函数的定义(不一定是声明),然后是封闭的名称空间等.
..
我想知道为什么以下代码会编译. #include template void print(T t) { std::cout
..
为什么以下代码会编译: template void foo(T in) { bar(in); } struct type{}; void bar(type) {} int main() { foo(type()); } 以下情况除外: template void foo(T in) { bar(in); } void bar(in
..
考虑一个简单的示例: template struct tag { }; int main() { auto foo = [](auto x) -> decltype(bar(x)) { return {}; }; tag bar(tag); bar(tag{}); //
..