![](/img/trans.png)
[英]C++ void_t SFINAE false_type true_type can't get specialization
[英]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.