问题标签 [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.
c++ - “使用”声明为 SFINAE
我可以using
在从模板类派生私有时使用 SFINAE(或其他技术)进行声明吗?为了更好地理解,请参见下面的代码:
我怎样才能达到期望的行为(如果可能的话)?
c++ - 派生类中的使用声明不会隐藏从基类派生的相同函数
看看下面的代码:
据我了解,B::f()
inC
应该隐藏using-declarationA::f()
带来的内容;C
如果是这样,那为什么c.C::f()
还要打电话A::f()
?
如果c.C::f()
调用A::f()
,那应该意味着在 的范围内C
,f()
应该总是引用A::f()
,这是 using-declaration 的功能。那么为什么在C::test()
, call tof()
仍然被评估到B::f()
?
c++ - 使用别名引用匿名结构会导致错误
我的理论是 gcc 有一个错误。以下在 clang 和 gcc 中编译:
但是现在当我将其更改为右值引用时,它会使用 clang 而不是 gcc 编译:
它也因版本而失败,typedef
并出现相同的错误:
为什么这无法在 gcc 中编译?这是标准的问题还是错误?
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 中编译而不会出现错误——但这不是解决问题的方法。
我的问题是:这个结构是否符合标准,或者错误消息是否正确?像explicit
B 中的复制构造函数这样的说明符是否有助于解决问题?
顺便说一句:在 Visual Studio 中,我收到警告:指定了多个赋值运算符(C4522),因为 C 类中的复制赋值运算符。有人可以向我解释一下,为什么这应该是一个问题?
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 语句来澄清否则存在的歧义时。
c++ - 在 C++11 using-declaration 中是否允许/需要“typename”?
以下代码在 g++ 和 clang 中正确编译:
但是 MSVC 2013 给出了以下错误:
如果我将该行更改为:
然后所有三个编译器都成功编译它。原版正确吗?(即这是一个 MSVC 错误,还是 gcc/clang 扩展)
c++ - 与使用声明在 GCC 中编译但在 MSVS 中不编译的类声明
以下程序是否符合 c++ 标准?
我使用不同的编译器得到不同的结果:
- gcc 编译它没有错误。
- visual c++ 给出错误 C2888: 'X::A': symbol cannot be defined within namespace 'Y'
我在 c++ 标准中没有发现我的程序违反的任何规则。
如果程序格式正确,为什么Visual Studio会报错?
如果程序格式不正确,它违反了 c++ 标准中的哪些规则,为什么 gcc 不给出错误?
我不是想让我的程序编译。我只是想找出它是否符合 c++ 标准,以及为什么我测试的两个编译器的行为不同。
c++ - using-declaration 不能在函数范围内重复。这是为什么?
在 [namespace.udecl]/10 中,您有以下示例:
此代码段在 clang 中编译。
c++ - 带有 using-declarations 链接的程序在 MSVS 和 clang 上编译,但在 GCC 上不编译
根据 c++ 标准,以下程序是格式正确的还是格式错误的?
我使用不同的编译器得到不同的结果:
- MSVS:编译(http://webcompiler.cloudapp.net/)
- Clang:编译(http://melpon.org/wandbox/permlink/KloDufJ5h1DalK4v)
- GCC:编译错误(http://melpon.org/wandbox/permlink/IKuuQGE1THofuUTr)
我不想修复这个程序以使其在 GCC 上编译。我只想知道 c++ 标准对此有何评论,以及为什么这三个编译器的行为不同。如果这是任何这些编译器中的错误的结果,我也想知道。