3
我在看提案N4502,並一直在試圖繞過它。我很高興看到第5部分,但是我認爲我理解的東西已經消失了。也許這只是我如何看待它。鑑於以下幾點:建議N4502如何工作? (「檢測成語」)
// primary template handles all types not supporting the operation: template< class, template<class> class, class = void_t< > > struct detect : false_type { }; // specialization recognizes/validates only types supporting the archetype: template< class T, template<class> class Op > struct detect< T, Op, void_t<Op<T>> > : true_type { };
要使用該檢測元函數,我們與其他 元函數爲它供給(即元回調),填補了 原型表達的作用。例如,這裏是
is_assignable
型特徵的實現:// archetypal expression for assignment operation: template< class T > using assign_t = decltype(declval<T&>() = declval<T const &>()) // trait corresponding to that archetype: template< class T > using is_assignable = detect<void, assign_t, T>;
我應該能夠檢查一個類型是分配。沒有給出它如何使用的例子,所以我假設它應該如此容易:
static_assert(is_assignable<int>::value, "Not assignable.");
現在只是看着這個,看起來不正確。我沒有看到assign_t
將與T
類型進行交互。
這怎麼讀給我的是:
is_assignable<int> -> detect<void, assign_t, int>
然後將不匹配的任何專業,去從std::false_type
繼承了基本情況。
編譯這個here似乎與我的理解一致。
那麼,我錯過了什麼?這應該如何使用?
我已經固定的上演示錯字。 – Adrian
我在這方面沒有看到任何編輯。在你的問題和你的鏈接中,你仍然有錯誤的檢測到(!='detect ')。 –
Jarod42
>編譯這個[here](http://rextester.com/IGZS87648)似乎同意我的理解。 – Adrian