如何解决否定概念C ++ 20
在玩耍时,我注意到以下代码在MSVC 19.27上编译
template <typename T>
concept defined = true;
template <!defined T> // <=== !!!!!!!!
inline auto constexpr Get()
{
return 5;
}
这是怎么回事?允许使用这种语法是否是一个坏主意?
解决方法
否,当将运算符用作占位符或简洁模板语法的一部分时,不允许将运算符应用于这些概念。如果需要这样做,则需要创建一个新概念,或者使用requires
子句将其大写。
你说得对; 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() { /* ... */ }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。