提问人:Lassie 提问时间:6/6/2023 最后编辑:user16217248Lassie 更新时间:6/7/2023 访问量:64
具有约束条件的模板类友谊
Template class friendship with constraints
问:
我尝试了以下方法,但它无法编译:
template<class LabelType>
requires requires { typename LabelType::LetterType; }
class MonoidalFSA
{
template<class T>
friend class MonoidalFSA;
};
error: redeclaration of ‘template<class LabelType> requires requires{typename LabelType::LetterType;} class MonoidalFSA’ with different constraints
尝试将约束也添加到朋友声明中,但我仍然遇到同样的错误。
template<class LabelType>
requires requires { typename LabelType::LetterType; }
class MonoidalFSA
{
template<class T>
requires requires { typename T::LetterType; }
friend class MonoidalFSA;
};
答:
3赞
Artyer
6/7/2023
#1
您的第二个片段是正确的,但看起来 gcc 不接受它,因为它认为这两个 requires 表达式不等价。
如果你把它总结成一个概念,它就被接受了:
template<typename LabelType>
concept HasLetterType = requires { typename LabelType::LetterType; };
template<class LabelType> requires HasLetterType<LabelType>
class MonoidalFSA
{
template<class T> requires HasLetterType<T>
friend class MonoidalFSA;
};
// Or simply
template<HasLetterType LabelType>
class MonoidalFSA
{
template<HasLetterType>
friend class MonoidalFSA;
};
评论
template<typename> friend class MonoidalFSA;