使用param声明方法的概念



我尝试声明下面的概念,但MSVC 16.8给出了一个编译器错误。我试图为包含函数的类创建一个概念:bool Serialize(Archiver&)我是在宣称这个概念是错误的,还是微软风投公司破产了?

struct Archiver {};
template<typename T>
concept Serializable = requires(T t) {
{t.Serialize(Archiver&)} -> std::same_as<bool>; // This gives compiler error.
};
struct SomeClass {
bool Serialize(Archiver&) { return true; }
};
template<Serializable S>
bool DoSerial(S& s) {
Archiver a;
return s.Serialize(a);
}
TEST_CASE("Call serializable class") {
SomeClass s;
CHECK(DoSerial(s) == true);
}

编辑:(错误列表(

Concepts.cpp(223,27(:错误C2760:语法错误:意外的标记"(",应为"表达式"Concepts.cpp(223,27(:错误C2760:语法错误:意外的令牌"(",应为"}"Concepts.cpp(239,5(:错误C2672:"DoSerial":找不到匹配的重载函数Concepts.cpp(239,5(:错误C7602:"DoSerial":不满足关联的约束Concepts.cpp(232(:消息:请参阅"DoSerial"的声明

这不是正确的语法。在requires表达式中,每个复合需求{ expression } -> requirement;中的表达式应该是有效的表达式,而不仅仅是";语法描述";。你可能想要更像这样的东西:

template<typename T>
concept Serializable = requires(T t, Archiver a) {
{t.Serialize(a)} -> std::same_as<bool>;
};

实例(尽管有GCC(

错误消息是由于MSVC试图将Archiver&)解析为RHS上没有有效语法术语的按位和操作。

最新更新