C++ SFINAE void_t 不工作
C++ SFINAE void_t not working
我尝试了 运行 下面的代码,它应该依赖于 void_t
技巧,应该选择更专业的 class 模板(在本例中是第二个)
#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;
}
我正在使用 MSVC 2015。但是,is_incrementable<int>::value
的结果是错误的。是我的代码有问题还是我的编译器有问题?
std::declval<T>
具有 return 类型 T&&
,因此 std::declval<int>()
是类型 int
的 rvalue。 "false" 的结果告诉您 int
rvalue 不可递增,这是正确的。
您可以将 std::declval<T>
替换为 std::declval<T&>
以使程序告诉您类型 T
的 lvalue 是否可递增。如果您对程序进行此更改,它应该打印 "true".
我尝试了 运行 下面的代码,它应该依赖于 void_t
技巧,应该选择更专业的 class 模板(在本例中是第二个)
#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;
}
我正在使用 MSVC 2015。但是,is_incrementable<int>::value
的结果是错误的。是我的代码有问题还是我的编译器有问题?
std::declval<T>
具有 return 类型 T&&
,因此 std::declval<int>()
是类型 int
的 rvalue。 "false" 的结果告诉您 int
rvalue 不可递增,这是正确的。
您可以将 std::declval<T>
替换为 std::declval<T&>
以使程序告诉您类型 T
的 lvalue 是否可递增。如果您对程序进行此更改,它应该打印 "true".