繁体   English   中英

C ++ SFINAE void_t无法正常工作

[英]C++ SFINAE void_t not working

我尝试运行以下代码,该代码应依赖void_t技巧,应在其中选择更专业的类模板(在本例中为第二个模板)

#include <iostream>
#include <type_traits>

template <class ...>
using void_t = void;

template <class T, class = void>
struct is_incrementable : public std::false_type { };
template <class T>
struct is_incrementable<T, void_t<decltype(++(std::declval<T>()))>> : public std::true_type { };

int main()
{
    std::cout << std::boolalpha;
    std::cout << is_incrementable<int>::value << std::endl;
    return 0;
}

我正在使用is_incrementable<int>::value 。但是, is_incrementable<int>::value为false。 我的代码有什么问题还是我的编译器有问题?

std::declval<T>具有返回类型T&& ,因此std::declval<int>()int类型的右值 结果“ false”告诉您int rvalue不可递增,这是正确的。

您可以将std::declval<T>替换为std::declval<T&>以使程序知道T类型的左值是否可递增。 如果对程序进行了更改,则应打印“ true”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM