相关疑难解决方法(0)

参数依赖名称查找和typedef

我不希望这个代码编译,但确实如此.我的理解是func(d)它在全局命名空间中查找名为"func"的函数,但也在任何传入参数的命名空间中查找(参数依赖查找)

但在这种情况下,参数位于全局命名空间中.那么为什么在ns命名空间中找到"func"呢?是否有特殊规则说如果参数类型是typedef,那么它使用底层类型的命名空间而不是实际参数的命名空间?

这似乎是真的,但我找不到任何支持这个......这是预期的行为吗?

namespace ns
{
    struct data {};
    void func(ns::data item) {}
};

// Create an alias "datatype" in the global namespace for ns::data
typedef ns::data datatype;


int main()
{
    datatype d;
    func(d);
}
Run Code Online (Sandbox Code Playgroud)

c++

10
推荐指数
3
解决办法
926
查看次数

标签 统计

c++ ×1