我正在尝试检测类和&的预增量运算符的存在。原始类型。我试过以下:
template <typename T>
struct has_pre_increment
{
template <typename U, typename = decltype(++(std::declval<U>()))>
static long test(const U&&);
static char test(...);
static constexpr bool value = sizeof(test(std::declval<T>())) == sizeof(long);
};
struct C
{
int operator++();
};
struct D
{
};
int main()
{
std::cout << std::boolalpha;
std::cout << has_pre_increment<int>::value << std::endl;
std::cout << has_pre_increment<C>::value << std::endl;
std::cout << has_pre_increment<D>::value << std::endl;
}
结果对于类是正确的,但是,对于int
,它无法检测到预增量运算符。你知道为什么吗?如何检测任何类型的operator++
?