我正在阅读一些基于 SFINAE 的特征的示例,但无法理解与 C++17 中的通用 lambda 相关的示例(isvalid.hpp)。
我可以理解它大致包含一些主要部分,以便实现类型特征,例如isDefaultConstructibleorhasFirst特征(isvalid1.cpp):
1. 使用 SFINAE 技术的辅助函数:
#include <type_traits>
// helper: checking validity of f(args...) for F f and Args... args:
template<typename F, typename... Args,
typename = decltype(std::declval<F>()(std::declval<Args&&>()...))>
std::true_type isValidImpl(void*);
// fallback if helper SFINAE'd out:
template<typename F, typename... Args>
std::false_type isValidImpl(...);
Run Code Online (Sandbox Code Playgroud)
2. 确定有效性的通用 lambda:
// define a lambda that takes a lambda f and returns whether calling f with args is valid
inline constexpr …Run Code Online (Sandbox Code Playgroud)