问题标签 [name-lookup]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
539 浏览

c++ - 这种语法非法吗?

以下内容无法在 GCC 4.8.1 上编译:

在 'tag' 之前抱怨 [Error] 预期的 ')'。虽然它在 Visual Studio 2013 上编译,但我想知道 VS2013 是否正确接受它。Tag当我在外部声明时它会编译Base<T>,但我想在它所属Tag的地方声明。Base<T>使用Derived(Base<T>::Tag tag) : Base<T>(tag) {}也没有帮助。解决上述问题的任何方法,以便两个编译器都接受这一点,同时保留TagBase<T>.

0 投票
1 回答
736 浏览

c++ - 为什么这个依赖名称查找会找到全局标识符而不是方法?

当编译器尝试解析时,它会在全局命名空间中i.template hi<T>();找到,而不是在( ideone ) 上的方法。为什么?hihii

我正在使用 g++ 4.9.1/4.9.2 ( -std=c++11)。确切的错误信息:

此代码适用于 Clang 和 VS2013,但会在 g++ 和 EDG 中生成错误。但是哪些编译器是正确的?

除了更改会员姓名之外,还有什么办法可以解决这个问题吗?std在我的真实代码中,当命名空间中的类型(例如,通过 导入using namespace std)与我的成员函数之一具有相同的名称时,就会出现冲突。显然,我希望我的实现代码是健壮的,并且不会导致用户代码中的随机名称冲突。

0 投票
2 回答
870 浏览

c++ - clang/g++ 与友元函数的区别

为什么下面的代码在 g++ 中编译良好,但在 clang 中出错?

证明链接:g++ / clang++

当我将朋友函数移动到全局命名空间时,为两个编译器(clang++ / g++)编译好的代码。

在这种情况下,哪种实现更兼容 C++ Standart?

0 投票
3 回答
285 浏览

c++ - C++ 在模板函数中强制执行第二遍名称查找

是否有某种方法可以强制 C++ 编译器在模板实例化期间(而不是之前)对给定符号执行名称查找?

给定以下代码:

有什么我可以做的(除了将定义f移到顶部)以使该代码编译并给出相同的结果,就好像所有定义f都在定义之前可用wrapper

我找不到任何东西,可能是因为我不知道如何正确表达这个问题。f如果有帮助,可以假定所有参数类型都是用户定义的类型。

0 投票
1 回答
53 浏览

c++ - 受模板方法声明影响的 C++ 名称查找

我不明白以下 C++ 代码片段(使用 GCC-4.7 测试)中对 static_cast 的需求:

如果我省略了 static_cast,我会得到一个链接器错误,因为它想使用:

代替:

另一方面,如果我用以下内容替换模板化方法(在上面的代码段中注释掉):

然后我没有收到错误,我可以看到在运行时调用了“正确”方法(即:

)。

为什么模板方法的声明会影响名称查找?提前谢谢了,

0 投票
1 回答
71 浏览

c++ - 我希望看到在嵌套名称说明符中忽略函数名称的示例

N4140 第 53 页的脚注 (33):

忽略函数名称的查找包括出现在嵌套名称说明符详细类型说明符基本说明符中的名称。

0 投票
1 回答
772 浏览

c++ - 模板参数名称隐藏

我最近被(简化)咬了

换句话说,类成员名称隐藏了模板参数(即使来自基类,因此在本地上下文中并不完全明显)。

做一些实验我发现:

这个明显荒谬的规则背后的理由(如果有的话)是什么?

我能想到的唯一方法是给出丑陋的模板参数名称,这也意味着不使用保留名称就不可能安全地编写模板(因为模板中使用的类可能会与参数名称冲突......请注意,很多 C++代码对私有成员使用丑陋的名称)。

PS:我没有深入研究这个问题的标准,但 g++ 和 clang++ 都同意这种行为,所以我不认为这是一个错误。

PPS:在实际代码中,被隐藏的模板参数名为tid,并且是整数而不是类型。-Wall不足以通知隐藏,我在用 valgrind 调试几个小时后发现了它。

0 投票
1 回答
2040 浏览

c++ - 使用 using 指令查找不明确的名称

不允许将命名空间和同名的类放在一个声明区域中,即

格式不正确(见 §3.3.1/4)。但是,可以通过 using-directive 引入任一名称:

这段代码格式不正确吗?VC++和Clang都这么认为

但是,GCC 接受它

谁是对的?

0 投票
1 回答
224 浏览

c++ - 名称查找问题,GCC 和 clang 不同意

正如 ecatmur 所指出的,这个问题在这里已经有了答案。

这个问题显然不是使用带有可变参数模板函数的 decltype 的尾随返回类型的重复。它实际上试图提出一个更简单的解决方案来解决该线程中的问题。问题是这个解决方案根据标准是否正确,因为 GCC 和 clang 不同意。仔细阅读这个问题,你就会意识到这一点。

这个问题是受这个启发的。我试图提出一个比已经提供的更简单的解决方案,并最终得到这个:

虽然此解决方案适用于 GCC,但它根本无法解决 clang 的问题。所以,我想知道哪个是正确的。

0 投票
1 回答
110 浏览

c++ - 模板内本地类成员的名称查找

考虑以下模拟constexprlambda 的代码(针对 C++17 提出,在 C++14 中不可用)。

在这里,lambda是在类模板的函数模板成员中定义的。令人惊讶的是,我不得不this->混淆lambda成员变量n_x_.

活生生的例子this->this->

我的印象是这仅在依赖基类中是必需的,但lambda该类只是一个本地类,而不是依赖基类。

问题:有人可以指出我在模板中查找本地类成员的名称的相关标准吗?