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



我在尝试检查一个类是否派生自另一个类时遇到(在我看来(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中将一致性模式设置为"否",则满足上述所有static_assert表达式。

但是,如果我将其设置为(即/permissive-(,则 (3( 满足,但所有 (1(、(2( 和 (4( 都失败。我希望任何人能给出任何见解来解释为什么会这样 - 是我的理解有错,还是 VS 问题?特别是,(3(和(4(可以(并且确实!(不同这一事实非常奇怪。

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

Intellisense 不是一个功能齐全的编译器,它可能不那么准确,或者可能没有更新以支持最新的语言功能,有时不同意编译器。

相关内容

  • 没有找到相关文章

最新更新