Visual c++ Visual Studio中嵌套模板的一致性模式和多重继承

Visual c++ Visual Studio中嵌套模板的一致性模式和多重继承,visual-c++,namespaces,multiple-inheritance,Visual C++,Namespaces,Multiple Inheritance,当我试图检查一个类是否派生自另一个类时,我在VisualStudio中遇到了(在我看来是)奇怪的行为。考虑以下样本: 样本1 namespace X { namespace Y { struct A {}; struct B {}; } } struct AB : public X::Y::A, public X::Y::B {}; static_assert(std::is_base_of_v<X::Y::A, AB>);

当我试图检查一个类是否派生自另一个类时,我在VisualStudio中遇到了(在我看来是)奇怪的行为。考虑以下样本:

样本1

namespace X
{
    namespace Y
    {
        struct A {};
        struct B {};
    }
}

struct AB : public X::Y::A, public X::Y::B {};

static_assert(std::is_base_of_v<X::Y::A, AB>); // (1)
static_assert(std::is_base_of_v<X::Y::B, AB>); // (2)
名称空间X
{
名称空间Y
{
结构A{};
结构B{};
}
}
结构AB:public X::Y::A,public X::Y::B{};
静态断言(std::is_base_of_v);//(1)
静态断言(std::is_base_of_v);//(2)
样本2

namespace X
{
    namespace Y
    {
        struct A {};
        struct B {};
    }
}

using namespace X::Y;
struct AB : public A, public B {};

static_assert(std::is_base_of_v<A, AB>); // (3)
static_assert(std::is_base_of_v<B, AB>); // (4)
名称空间X
{
名称空间Y
{
结构A{};
结构B{};
}
}
使用名称空间X::Y;
结构AB:公共A,公共B{};
static_assert(std::visualstudio中_v的_base_为No,则满足上面所有的
static_assert
表达式


但是,如果我将其设置为“是”(即
/permissive-
),则(3)是满意的,但所有(1)、(2)和(4)都失败了。我希望任何人都能深入了解为什么会出现这种情况-这是我的理解有错,还是一个VS问题?特别是,(3)和(4)可以(而且可以!)Difference很奇怪。

IntelliSense错误地将它们标记为失败,但如果您尝试构建项目,它将成功编译

Intellisense不是一个功能齐全的编译器,它可能不够准确,或者可能无法更新以支持最新的语言功能,有时与编译器不一致