c++ - 否定一个概念 (C++20)
问题描述
玩耍时,我注意到以下代码在 MSVC 19.27 上编译
template <typename T>
concept defined = true;
template <!defined T> // <=== !!!!!!!!
inline auto constexpr Get()
{
return 5;
}
这是怎么回事?允许这种语法是一个坏主意吗?
解决方案
你是对的; MSVC 19.27 和 19.28(VS16.9 之前)支持带有!
for 否定概念的语法(参见编译器资源管理器)。
即使 C++20 中不允许这种语法,你也可以做一些非常接近的事情
template<typename T>
concept defined = your_rule_on<T>;
template <typename T>
requires defined<T>
inline auto constexpr Get() { /* ... */ }
template <typename T>
requires(!defined<T>) // <=== !
inline auto constexpr Get() { /* ... */ }
推荐阅读
- regex - 查找/查找:我在这里做错了什么?
- javascript - 传单层数的限制?
- sql - 使用 T-SQL 从字符串中解析 DateTime
- python - 无法修改 2D 选项卡
- java - 我们可以通过使用数学逻辑而不使用 for 循环逻辑(从 len-1 开始)或内置函数来反转字符串吗
- javascript - 如何将错误的构建文件行号与我的开发文件相关联?
- python - readline 构建轮失败 - 在 OSX 上安装 Rekall 时
- c# - Visual Studio 正在寻找没有 publicKeyToken 的旧 Nuget 包
- node.js - 未进行重大代码更改后 AWS 构建失败
- sql - 在 Oracle 中连接并缩短一周中的天数