我有这个代码:
template<class T>
concept Indexable = requires(T t, size_t val){
!std::is_same<decltype(t.operator[](val)), void>::value;
};
它在这个测试中不起作用,我不明白如何检查函数是否为非空。
struct bad {
void operator[](size_t) {
// need to return
}
};
static_assert(!Indexable<bad>, "fail");
但在其他类似的情况下,它可以工作:
static_assert(Indexable<std::map<int, std::string>>, "fail");
我尝试过void、void()和其他模板,但最终都成功了。
1条答案
按热度按时间cyvaqqii1#
要求表达式已经有了“检查某个表达式的结果是否满足一个概念”的语法。所以你应该使用它。
Here's a working example .