gpt4 book ai didi

c++ - MSVC(似乎并不完美)对 constexpr 的支持

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:16 25 4
gpt4 key购买 nike

我正在制作 type traits 的 is_base_of 的原始轮子。这是关于我的实现的最小演示(没有考虑健壮性,is_class ...)。

#include <type_traits>
#include <cstdint>
struct A
{

};
struct B : A
{

};
template
<typename T, typename U>
struct IsBaseOf {
constexpr static bool Test(T* t)
{
return true;
}

constexpr static bool Test(...)
{
return false;
}

constexpr static bool value = IsBaseOf<T,U>::Test(static_cast<U*>(nullptr));
};
int main()
{
static_assert(IsBaseOf<A, B>::value, "Pass");
}

这个demo可以用gcc/clang编译,但不能用MSVC编译。 http://rextester.com/ATOC6638 http://rextester.com/IWU81465

当我在笔记本电脑的 Visual Studio 2015(带有更新补丁 3)上键入它时。也无法编译,编译前IDE提示“表达式必须有常量值”。

所以我想知道 MSVC 对 constexpr 的支持如何,还是我的代码有误?

最佳答案

这几乎可以肯定是 MSVC 中的错误。特别是以前的版本在 constexpr 方面存在很多问题。 Here's just a bunch of them例如。 MSVC 对许多新功能的支持还不是很好。但它正在变得更好。您将希望始终使用最新版本来尝试此类内容。 VisualStudio 2017 可以很好地编译这段代码……

关于c++ - MSVC(似乎并不完美)对 constexpr 的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52551666/

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