#ifdef AS_SYSTEM #pragma clang system_header namespace system { class A { public: A() { foo(); // no-warning } virtual int foo(); }; } #else namespace header { class A { public: A() { foo(); // expected-warning{{Call virtual functions during construction or destruction will never go to a more derived class}} } virtual int foo(); }; } #endif