Visual Studio 中嵌套模板的一致性模式和多重继承
Conformance Mode and Multiple Inheritance with Nested Templates in Visual Studio
我在尝试检查一个 class 是否源自另一个时遇到(在我看来)来自 Visual Studio 的奇怪行为。考虑以下示例:
示例 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)
示例 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)
我在 Visual Studio 中添加了 /std:c++latest
选项,所以据我了解,嵌套命名空间应该没问题。
如果我把Visual Studio中的Conformance Mode设为No,那么上面的static_assert
表达式都满足了
但是,如果我将它设置为是(即/permissive-
),则(3)满足但(1),(2)和(4)失败。我很感激任何人都可以就为什么会出现这种情况提供任何见解 - 这是我的理解错误,还是 VS 问题?特别是,(3) 和 (4) 可以(并且确实!)不同这一事实非常奇怪。
IntelliSense 错误地将它们标记为失败,但如果您尝试构建项目,它将成功编译。
Intellisense 不是一个功能齐全的编译器,它可能不那么准确或者可能没有更新以支持最新的语言功能,有时与编译器不一致。
我在尝试检查一个 class 是否源自另一个时遇到(在我看来)来自 Visual Studio 的奇怪行为。考虑以下示例:
示例 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)
示例 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)
我在 Visual Studio 中添加了 /std:c++latest
选项,所以据我了解,嵌套命名空间应该没问题。
如果我把Visual Studio中的Conformance Mode设为No,那么上面的static_assert
表达式都满足了
但是,如果我将它设置为是(即/permissive-
),则(3)满足但(1),(2)和(4)失败。我很感激任何人都可以就为什么会出现这种情况提供任何见解 - 这是我的理解错误,还是 VS 问题?特别是,(3) 和 (4) 可以(并且确实!)不同这一事实非常奇怪。
IntelliSense 错误地将它们标记为失败,但如果您尝试构建项目,它将成功编译。
Intellisense 不是一个功能齐全的编译器,它可能不那么准确或者可能没有更新以支持最新的语言功能,有时与编译器不一致。