C ++ SFINAE检测增量运算符

时间:2016-03-29 22:34:17

标签: c++ sfinae

我正在尝试检测类和&的预增量运算符的存在。原始类型。我试过以下:

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++

0 个答案:

没有答案