gpt4 book ai didi

c++11 - 调用基类constexpr方法时VS2015内部编译器错误

转载 作者:行者123 更新时间:2023-12-01 23:43:41 24 4
gpt4 key购买 nike

以下代码产生内部编译器错误(VS2015)

struct A
{
constexpr A(){}
constexpr int bar()
{
return 3;
}
};

struct B : A
{
constexpr B(){}
constexpr int foo()
{
return A::bar();
}
};

int main()
{
constexpr B b;
constexpr int dummy = b.foo();
return 1;
}

但是,如果我删除 A::限定符:

constexpr int foo()
{
return bar();
}

它将被编译。当这些方法具有相同的名称时就会出现问题,我需要调用基类方法。 (例如,当使用递归模板继承时)

有什么解决方法吗?

最佳答案

实际问题是 b 被声明为 const(constexpr 暗示对象上的 const)而你是尝试调用非 const(自 C++14 起,constexpr 并不意味着方法上的 const,参见 here)方法const 对象...

根据标准,您应该无法通过简单地删除 A::static_cast 来解决问题。 Visual Studio 2015 的预 RTM 版本允许您执行此操作,只是因为它对 constexpr 的支持是初步的并且非常有问题。 C++11 constexpr(但不幸的是不是 C++14 扩展 constexpr)预计将在 VS 2015 的 RTM 版本中得到完全支持(参见 here)。

您的代码的正确版本是:

struct A
{
constexpr A(){}
constexpr int bar() const
{
return 3;
}
};

struct B : A
{
constexpr B(){}
constexpr int foo() const
{
return A::bar();
}
};

int main()
{
constexpr B b;
constexpr int dummy = b.foo();
return 1;
}

关于c++11 - 调用基类constexpr方法时VS2015内部编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30139718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com