表达概念中数据成员的概念要求的最佳方式是什么?

dcm*_*m88 3 c++ c++-concepts c++20

为该类型的数据成员定义具有嵌套概念要求的概念的最佳方法是什么?沿着这些路线的东西:

template<typename T>
concept MyConcept = requires(T a) {    
    {a.something} -> std::integral;
};
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为a.something它被作为参考 ( delctype((a.something)))选取。我想出的最好的作品是这样的东西,它强制一个右值:

constexpr auto copy = [](auto value) { return value; };

template<typename T>
concept MyConcept = requires(T a) {    
    {copy(a.something)} -> std::integral;
};
Run Code Online (Sandbox Code Playgroud)

我有更好的选择吗?

Sto*_*ica 5

缺点copy是它可能会为您造成误报。引用成员将衰减为一个值。确保分析成员的实际类型的唯一方法是编写显式嵌套需求。

template<typename T>
concept MyConcept = requires(T a) {    
    requires std::integral<decltype(a.something)>;
};
Run Code Online (Sandbox Code Playgroud)