我正在观看Walter Brown的CppCon2014关于模板元编程的第二部分,在此期间他讨论了他的新颖void_t<>结构的用法.在他的演讲中,Peter Sommerlad问他一个我不太明白的问题.(链接直接转到问题,正在讨论的代码直接发生在那之前)
索默拉德问道
沃尔特,这是否意味着我们现在实际上可以实现概念精简版?
沃尔特回应了什么
哦耶!我已经完成了......它没有完全相同的语法.
我理解这个交换是关于Concepts Lite的.这种模式真的那么多才多艺吗?无论出于何种原因,我都没有看到它.有人可以解释(或描绘)这样的事情会是什么样子?这是关于enable_if和定义特征,还是提问者指的是什么?
该void_t模板定义如下:
template<class ...> using void_t = void;
Run Code Online (Sandbox Code Playgroud)
然后他使用它来检测类型语句是否格式正确,使用它来实现is_copy_assignable类型特征:
//helper type
template<class T>
using copy_assignment_t
= decltype(declval<T&>() = declval<T const&>());
//base case template
template<class T, class=void>
struct is_copy_assignable : std::false_type {};
//SFINAE version only for types where copy_assignment_t<T> is well-formed.
template<class T>
struct is_copy_assignable<T, void_t<copy_assignment_t<T>>>
: std::is_same<copy_assignment_t<T>,T&> {};
Run Code Online (Sandbox Code Playgroud)
由于这个话题,我理解这个例子是如何工作的,但是我没有看到我们如何从这里得到像Concepts Lite这样的东西.