【发布时间】:2019-02-07 16:30:13
【问题描述】:
我正在处理一个在没有外部声明的类中定义友元函数的类
namespace our_namespace {
template <typename T>
struct our_container {
friend our_container set_union(our_container const &, our_container const &) {
// meaningless for the example here, just a valid definition
// no valid semantics
return our_container{};
}
};
} // namespace our_namespace
如前所述(例如here 或here),函数set_union 不在our_namespace 命名空间中,但将通过参数相关查找找到:
auto foo(std::vector<our_namespace::our_container<float>> in) {
// works:
return set_union(in[0], in[1]);
}
但我注意到 in the debug flags set_union 似乎在 our_namespace 命名空间中
mov rdi, qword ptr [rbp - 40] # 8-byte Reload
mov rsi, rax
call our_namespace::set_union(our_namespace::our_container<float> const&, our_namespace::our_container<float> const&)
add rsp, 48
pop rbp
ret
our_namespace::set_union(our_namespace::our_container<float> const&, our_namespace::our_container<float> const&): # @our_namespace::set_union(our_namespace::our_container<float> const&, our_namespace::our_container<float> const&)
push rbp
mov rbp, rsp
mov qword ptr [rbp - 16], rdi
mov qword ptr [rbp - 24], rsi
pop rbp
ret
虽然我不能称它为our_namespace::set_union
auto foo(std::vector<our_namespace::our_container<float>> in) {
// fails:
return our_namespace::set_union(in[0], in[1]);
}
关于如何理解调试信息的任何提示?
编辑:set_union 函数体在这里只是一个稻草狗示例,具有有效定义。
【问题讨论】:
标签: c++ argument-dependent-lookup friend-function