我有一段 C++17 的 SFINAE 代码
#include <type_traits>
template<typename>
constexpr bool dependentFalse = false;
template<typename T>
struct IAmEmpty
{
template<typename U=T, std::enable_if_t<dependentFalse<U>>* =nullptr>
auto deleteMe()
{}
};
template struct IAmEmpty<int>;
https://godbolt.org/z/vWW3favWj
我正在尝试将其重新编写为 C++20,我想知道:
#include <type_traits>
template<typename T>
struct IAmEmpty
{
template<typename U=T>
requires false
void deleteMe() {}
void deleteMeToo() requires false {}
};
template struct IAmEmpty<int>;
据我所知,领先的要求接近使用例如等实现的 C++20 之前的 SFINAE enable_if
。void_t
因此deleteMe
实际上是一个成员函数模板。
deleteMeToo
不是函数模板(或者我错了?)。实例:
https://godbolt.org/z/rGzx8dz3f
是否存在deleteMe
和deleteMeToo
实际上表现不同的情况,并且在优先选择尾随要求而不是前导要求时应该注意?