【发布时间】:2018-09-28 08:52:09
【问题描述】:
我正在制作类型特征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 的支持如何,还是我的代码有误?
【问题讨论】:
-
我认为你需要一个更新的编译器来查看godbolt.org/z/xtG77j VS2015 失败,但 VS2017 编译器可以编译它
标签: c++ c++11 visual-c++ typetraits