bra*_*ing 0 c++ type-traits perfect-forwarding c++11
这是一个后续问题
已经正确回答.但是我在下面尝试了自己的解决方案
#include <type_traits>
template <typename T, typename enable = void> struct Traits {
static const bool value = false;
};
template <typename T> struct Traits<T,std::enable_if<std::is_reference<T>::value>> {
static const bool value = Traits<typename std::remove_reference<T>::type>::value;
};
struct Zip{};
template <> struct Traits<Zip,void> {
static const bool value = true;
};
template <typename E>
void Execute(E && e){
static_assert(Traits<E>::value);
}
int main(){
auto z = Zip();
Execute(z);
}
Run Code Online (Sandbox Code Playgroud)
理论是,如果正确的专业化失败,那么下一个最专业化的将是基于if T是参考的匹配的那个.如果这匹配,则引用被剥离,我们希望得到一个匹配.但这似乎不起作用.有没有办法解决这个问题,保持我的尝试精神?
你在滥用std::enable_if.如上所述,您的Traits结构std::enable_if本身是专门的,而不是结果.您需要访问嵌套::type类型别名:
typename std::enable_if<std::is_reference<T>::value>::type
// or
std::enable_if_t<std::is_reference<T>::value>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |