我最近發現使用using將基類函數導入派生類的名稱空間(當它被隱藏時)。我試圖用它來從基類導入功能的功能在派生類中實現: class A {
public:
virtual void foo() = 0;
};
class B {
public:
void foo() {
}
};
class C : public A, public B {
pub
我的理論是gcc有一個bug。 using type = const struct {}&;
但現在當我將其更改爲右值引用它鏗鏘編譯,但不能用gcc:在這兩個鐺和gcc以下編譯 using type = const struct {}&&;
// main.cpp:8:17: error: expected ';' after struct definition
// typedef s
在[namespace.udecl]/10則有以下示例: namespace A {
int i;
}
namespace A1 {
using A::i;
using A::i; // OK: double declaration
}
void f() {
using A::i;
using A::i; // error: double
看一看下面的代碼: struct A {
public:
virtual void f(){std::cout << "in A";};
};
struct B : A{
public:
virtual void f(){std::cout << "in B";};
int a;
};
struct C : B{
using A::f;
請考慮以下程序。根據C++標準是它良好的成立(該標準的相關部分引用所需的): namespace X { extern int i; }
namespace N { using X::i; }
int N::i = 1;
int main() {}
我得到不同的編譯器不同的結果。我試圖找出什麼編譯器我應該立案的bug報告: 鏘:提供了以下編譯器錯誤:沒有名爲「我」在命名空間「N」
,請參見下面的代碼 struct A { using type = int; };
struct B : private A {};
struct C : B { using base_type = A; };
所有GCC 6.1,鐺3.8和MSVC 2015年更新3拒絕編譯這一點,因爲A是不是因爲裏面C的訪問名稱A是B的私人基礎。看來gcc認爲A在using base_type = A是
Base::f(int)和Derived::f(int)之間的main()以下表達式d.f(1);中爲什麼沒有含糊不清? class Base
{
public:
void f(int i) {}
void f(int i, int j) {}
};
class Derived : public Base
{
public:
using