【发布时间】:2016-05-31 16:14:03
【问题描述】:
我有一个简单的元函数:
template <typename T>
using is_const_lvalue_reference = mpl::and_<
std::is_lvalue_reference<T>,
std::is_const<typename std::remove_reference<T>::type>
>;
显然,如果 T 是 MPL 占位符,则它不起作用,因为 remove_reference 被评估为占位符类而不是替代类型。如何正确执行此操作才能在 MPL 算法中使用此元函数?
更新:建议的解决方案是用结构替换别名,这将延迟std::remove_reference 中的模板实例化。问题是,如何在不使用任何辅助结构的情况下延迟内联实例化?
template <typename Sequence>
using are_const_lvalue_references = mpl::fold<
Sequence,
mpl::true_,
mpl::and_<
mpl::_1,
mpl::and_<
std::is_lvalue_reference<mpl::_2>,
std::is_const<typename std::remove_reference<mpl::_2>::type>
>
>
>;
这个例子显然会因为同样的原因而失败。我应该改变什么才能使它正确?
【问题讨论】:
标签: c++ boost metaprogramming template-meta-programming boost-mpl