【发布时间】:2017-03-18 03:53:50
【问题描述】:
我最近一直在尝试 C++ 概念。我正在尝试以下 Ranges Extensions 文档中的定义:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4569.pdf
Same 的定义和用法让我很困惑。由于我不知道的原因,作者没有给出明确的定义。所以我正在使用:
template <class T, class U>
concept bool Same()
{
return std::is_same<T, U>::value;
}
问题是文档给出了Assignable的以下定义:
template <class T, class U>
concept bool Assignable()
{
return Common<T, U>() && requires(T&& a, U&& b) {
{ std::forward<T>(a) = std::forward<U>(b) } -> Same<T&>;
};
}
它不起作用(在 GCC 6.3 下):一个简单的Assignable<int&, int&&>() 概念检查给了我false(我已经验证Common 部分没问题)。我必须将 Same<T&> 更改为 T& 以使其看起来有效。同样的Same<Type>检查也用于其他一些地方。
我的问题是:
- 我对@987654332@ 的定义是否正确?
- 为什么使用
Same<T&>而不是T&?有什么区别?
感谢您的帮助。
【问题讨论】:
标签: c++ c++-concepts