c++ - 寻找对(假定的)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 及更高版本似乎按预期工作。
有人对此(错误)有任何见解吗?有没有一种简单的解决方法不会使事情过于复杂?
解决方案
推荐阅读
- r - 如何记录依赖外部包中的类的 S4 方法?
- powershell - PowerShell 松弛函数
- node.js - Selenium Web 驱动程序无法在 Heroku 上打开浏览器
- java - 带有返回值的@Contract 注释以及更改和未更改的参数
- javascript - 表单验证功能在提交时不运行
- java - 在 Spring Boot 中使用微服务 Jar 文件部署时访问网络目录上的外部文件
- javascript - 从行中提取值以在 URL 中使用
- python - 在范围内生成多个唯一随机整数的最快速和计算效率最高的方法,不包括整数列表
- php - 为什么我无法在 mvc 中使用 phpseclib 登录?
- google-api - 如何在没有 api 库的情况下从 Google 获取访问令牌?