首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >否定概念(C++20)

否定概念(C++20)
EN

Stack Overflow用户
提问于 2020-08-16 18:15:48
回答 2查看 396关注 0票数 1

在这里,我注意到以下代码是在MSVC 19.27上编译的

代码语言:javascript
复制
template <typename T>
concept defined = true;

template <!defined T>             // <=== !!!!!!!!
inline auto constexpr Get()
{
    return 5;  
}

到底怎么回事?允许这种语法真的是个坏主意吗?

EN

回答 2

Stack Overflow用户

发布于 2021-04-20 16:12:48

你说得对;MSVC19.27和19.28 (VS16.9之前的版本)支持使用!进行概念否定的语法(compiler explorer中的cf)。

即使在C++20中不允许使用此语法,您也可以执行一些非常接近的操作

代码语言:javascript
复制
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() { /* ... */ }

demo

票数 2
EN

Stack Overflow用户

发布于 2020-08-16 22:13:17

不,当概念作为占位符或简明模板语法的一部分使用时,不允许将运算符应用于概念。如果您需要这样做,那么您需要创建一个新概念,或者使用requires子句将其拼写为长文本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63435642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档