例子:
template<typename T>
concept SequenceContainer = Container<T> && requires (T a)
{
{ a.front() } -> typename T::reference;
/* requirements */
};
这里我们要求返回类型是非常量引用。但是如果a是 type const T,显然是正确的,增加一个额外的要求,说明“如果a是 type const T,那么成员函数调用front()必须返回const_reference”:
template<typename T>
concept SequenceContainer = Container<T> && requires (T a, const T b)
{
{ a.front() } -> typename T::reference;
{ b.front() } -> typename T::const_reference;
/* requirements */
};
问题:有没有办法不指定第二个参数 - const T b,而是以某种方式说在这个要求中类型a应该被视为const T?我在en.cppreference.com或eel.is上都没有找到合适的东西。
也就是说,理想情况下,我想要类似的东西:
{ a.front() const } -> typename T::const_reference;
如果没有这样的方法,你需要按照上面的描述做(第二个参数为 const 类型)——如果可能的话,分享标准中相应段落的链接(我说的是草稿,当然) .
我想到了几个选项:
std::as_const(a).front()std::declval<const T &>().front()