c++ - 否定一个概念 (C++20)

标签 c++ c++20 c++-concepts

玩弄,我注意到以下代码在 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 之前)支持 ! 的语法用于否定概念(参见 compiler explorer )。
即使 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() { /* ... */ }
demo

关于c++ - 否定一个概念 (C++20),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63435642/

相关文章:

c++ - 迭代器的值

c++ - 尝试在不了解某些内容的情况下编译 .h 文件

c++ - Qt 6.4.3 QMediaPlayer::资源错误 "Could not open file"

c++ - 指定的初始化和基类?

c++ - 如何类型删除 C++ 概念

c++ - 与.net相比,C++的所有权概念

c++ - 检查嵌套类模板的概念

c++ - 在屏幕右侧显示主窗口(Qt 5.1.0)

c++ - 在用它执行算术时隐式地将对象转换为浮点类型

c++ - std::declare_if 或其他在编译时丢弃成员声明的假设方法