首页 > 解决方案 > 寻找对(假定的)MSVC 19.16 错误的洞察力

问题描述

概念证明:https ://godbolt.org/z/bbpxUB

#include <type_traits>

template <typename T, std::size_t S = sizeof(T)>
using complete_t = T;

template <typename...>
struct is_complete_type : std::false_type {};

template <typename T>
struct is_complete_type<complete_t<T>> : std::true_type {};

template <typename>
struct A;

template <>
struct A<int> {};

static_assert(is_complete_type<A<int>>::value);
static_assert(!is_complete_type<A<double>>::value);

MSVC 19.16

(19): 错误 C2607: 静态断言失败

编译器返回:2

我正在编写一个类型特征来确定给定类型是否已完全定义。结果非常简单,并且基于未完全定义的类型没有大小这一事实。它对于确定类型是否已被特化很有用。它适用于大多数编译器,但在 MSVC 19.16 中失败。MSVC 19.20 及更高版本似乎按预期工作。

有人对此(错误)有任何见解吗?有没有一种简单的解决方法不会使事情过于复杂?

标签: c++

解决方案


推荐阅读