为什么较新版本的C++不允许在类声明中定义纯方法?

Rai*_*op7 0 c++ oop chain

为什么MSVC++ 2015及其早期版本允许在pure virtual method类声明中定义,但On GCC 4.9和我想MSVC++ 2017不允许:

    #include <iostream>     

    class A{
        public:
            virtual void Foo() = 0;
    };

    class B: public A {
        public:
            virtual void Foo() = 0 { std::cout << "B::Foo()" << std::endl;
            }; // Allowed on MSVC 2015 and old versions

            //virtual void Foo() = 0; // on newer versions
    };

    //void B::Foo(){
    //  std::cout << "B::Foo()" << std::endl;
    //}     // Ok here!

    class C : public B{
        public:
            void Foo(){
                B::Foo();
                std::cout << "C::Foo()" << std::endl;
            }
    };

    int main(){

    //  A aObj; // error
    //  B bObj; // error
        C cObj; // correct
        cObj.Foo();

        std::cout << std::endl;
        std::cin.get();
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

DrS*_*Hay 7

标准明确提到不允许这样做(例如C++ 14,§10.4./ 2)

函数声明不能​​同时提供纯指定符和定义 - 结束注释] [示例:struct C {virtual void f()= 0 {}; //格式错误}; - 结束例子]