我正在开发一个自定义的、大量使用模板的序列化库,它带有自定义的序列化程序。我希望能够使用SFINAE在我的库中检测并执行Serializer概念(我不能访问支持概念的C++20编译器): class CustomSerializer static T Serialize(S);}; 这里的思想是Serialize的输入类型必须等
当泛型lambda的实例化格式良好但不可编译时,我在检测它时遇到问题,而检测它使我感到困惑:{ int get您可能会指责我在表达式SFINAE方面缺乏经验(谢谢Visual!),但我很惊讶:如果f(std::declval<_A>())格式不好,创建test()返回类型的解密类型肯定不能替代吗?显然,答案是,确实无法替代,但以非SFINAE的方式。如果
过时的探索了使用decltype和SFINAE来检测某个类型是否支持某些操作符的方法,例如==或<。下面是用于检测类是否支持<操作符的示例代码:struct supports_less_than static auto less_than_test(但是,如果我尝试将它与不支持<运算符的类一起使用,则会得到一个编译器错误:
error: no match
std::vector<T>类是STL容器概念的模型,因此向量的任何适当实现都必须包括嵌套的typedef value_type和reference。这应该可以用SFINAE检测到。然而,在我自己的测试中,我可以使用SFINAE来检测嵌套的value_type类型,但由于某种原因,我无法检测到reference。程序根本无法编译,给出了错误:error: no matching func