问题标签 [using-declaration]

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 投票
0 回答
34 浏览

c++ - 在块范围内使用重新声明

这是导致编译时错误的代码:

演示

标准所说的是(N4296::7.3.3/10 [namespace.udecl]):

using-declaration 是一种声明,因此可以在允许(并且仅在)允许多个声明的地方重复使用。

所以,我认为任何重新声明在块范围内都是不正确的。但节目

演示

工作正常。那么为什么 using 重新声明实际上阻止了在块范围内出现两次呢?

0 投票
2 回答
570 浏览

c++ - “使用”声明为 SFINAE

我可以using在从模板类派生私有时使用 SFINAE(或其他技术)进行声明吗?为了更好地理解,请参见下面的代码:

我怎样才能达到期望的行为(如果可能的话)?

0 投票
1 回答
563 浏览

c++ - 派生类中的使用声明不会隐藏从基类派生的相同函数

看看下面的代码:

据我了解,B::f()inC应该隐藏using-declarationA::f()带来的内容;C如果是这样,那为什么c.C::f()还要打电话A::f()

如果c.C::f()调用A::f(),那应该意味着在 的范围内Cf()应该总是引用A::f(),这是 using-declaration 的功能。那么为什么在C::test(), call tof()仍然被评估到B::f()

0 投票
1 回答
184 浏览

c++ - 使用别名引用匿名结构会导致错误

我的理论是 gcc 有一个错误。以下在 clang 和 gcc 中编译:

但是现在当我将其更改为右值引用时,它会使用 clang 而不是 gcc 编译:

它也因版本而失败,typedef并出现相同的错误:

为什么这无法在 gcc 中编译?这是标准的问题还是错误?

0 投票
1 回答
911 浏览

c++ - 赋值运算符重载有类似的转换(仅在 VS 中)

我有一个包含三个类(A、B 和 C)的类层次结构。A 和 B 是基类,使用派生类型进行参数化。C类派生自A和B。

using super::operator=B 类为 A 类型的对象提供了一个赋值运算符,而 C 类通过声明继承了这个赋值运算符。

当我从 A 类型的对象定义类 B 中的构造函数时,我得到错误: 两个重载在 Visual Studio 2013 中具有相似的转换(C2666),但在 gcc (4.8.2) 中没有任何错误或警告、clang (3.4) 和英特尔 icc (Studio 2015)。(编译-Wall -pedantic

这是简化的示例:

如果我将模板化类 A 替换为非模板化类,它也会在 Visual Studio 中编译而不会出现错误——但这不是解决问题的方法。

我的问题是:这个结构是否符合标准,或者错误消息是否正确?像explicitB 中的复制构造函数这样的说明符是否有助于解决问题?

顺便说一句:在 Visual Studio 中,我收到警告:指定了多个赋值运算符(C4522),因为 C 类中的复制赋值运算符。有人可以向我解释一下,为什么这应该是一个问题?

0 投票
0 回答
395 浏览

c++ - Visual Studio 2015 错误?不明确的成员函数访问,祖先类的顺序覆盖 using 语句

我错过了什么,还是我发现了 Visual Studio 错误?

除了错误,使用这种类型的继承是好还是坏?

GCC 4.9.0 产生了我的预期结果:

但是,VS 2015 (CTP 6) 和 VS 2013 (Update 5 CTP) 都产生了我认为不正确的结果:

将“class derivedClassB:public derivedClassA,otherBaseClass {”更改为“class derivedClassB:public otherBaseClass,derivedClassA {”会产生我预期的结果。我可能会遗漏一些东西,但是尽管继承自的类的顺序会影响初始化顺序,但我认为它不会影响使用哪个模棱两可的函数——尤其是当有一个 using 语句来澄清否则存在的歧义时。

0 投票
2 回答
782 浏览

c++ - 在 C++11 using-declaration 中是否允许/需要“typename”?

以下代码在 g++ 和 clang 中正确编译:

但是 MSVC 2013 给出了以下错误:

如果我将该行更改为:

然后所有三个编译器都成功编译它。原版正确吗?(即这是一个 MSVC 错误,还是 gcc/clang 扩展)

0 投票
2 回答
1240 浏览

c++ - 与使用声明在 GCC 中编译但在 MSVS 中不编译的类声明

以下程序是否符合 c++ 标准?

我使用不同的编译器得到不同的结果:

  • gcc 编译它没有错误。
  • visual c++ 给出错误 C2888: 'X::A': symbol cannot be defined within namespace 'Y'

我在 c++ 标准中没有发现我的程序违反的任何规则。

如果程序格式正确,为什么Visual Studio会报错?

如果程序格式不正确,它违反了 c++ 标准中的哪些规则,为什么 gcc 不给出错误?

我不是想让我的程序编译。我只是想找出它是否符合 c++ 标准,以及为什么我测试的两个编译器的行为不同。

0 投票
1 回答
290 浏览

c++ - using-declaration 不能在函数范围内重复。这是为什么?

在 [namespace.udecl]/10 中,您有以下示例:

此代码段在 clang 中编译。

0 投票
2 回答
400 浏览

c++ - 带有 using-declarations 链接的程序在 MSVS 和 clang 上编译,但在 GCC 上不编译

根据 c++ 标准,以下程序是格式正确的还是格式错误的?

我使用不同的编译器得到不同的结果:

我不想修复这个程序以使其在 GCC 上编译。我只想知道 c++ 标准对此有何评论,以及为什么这三个编译器的行为不同。如果这是任何这些编译器中的错误的结果,我也想知道。