C++ 访问基本目录中的受保护副本

C++ 访问基本目录中的受保护副本,c++,gcc,visual-c++,intellisense,C++,Gcc,Visual C++,Intellisense,GCC和MSVC接受以下代码段,但Intellisense(EDG)提出投诉: class Base { protected: Base(Base const&) { } }; class Derived : public Base { // Error: protected function Base::base(const Base&) ... is not accessible // through a "Base" pointer or object. pub

GCC和MSVC接受以下代码段,但Intellisense(EDG)提出投诉:

class Base {
protected:
    Base(Base const&) { }
};


class Derived : public Base {
// Error: protected function Base::base(const Base&) ... is not accessible
// through a "Base" pointer or object.
public:
    Derived(Derived const& src) = default;
};
奇怪的是,等价的代码
:Base(src){}
被接受了


Intellisense是否可以拒绝默认的复制ctor?

代码似乎正确(例如,clang没有问题),看起来像是编译器错误。如果
Base::Base(Base const&)
=default
,会发生什么情况?VS2013更新4没有任何错误。你用的是什么版本?我从来没有听说过Intellisense是对的,编译器是错的。相反的情况很常见。Intellisense在解析模板时常常被错误地认为是正确的。Intellisense现在是EDG编译器,它更接近标准。它的主要问题是处理半完整的代码,这对于自动完成(根据定义,自动完成可以处理不完整的代码)来说是不幸的。错误的红色下划线通常是可以的。