c++ 11中嵌套的std::conditional
C++11 nested std::conditional
这个表达式有什么问题?
template<class T, class FieldT>
using addRefU = typename std::conditional<
// ok when true. When false result has no reference at all
false,
typename std::add_rvalue_reference< FieldT >::type,
typename std::conditional<
true,
typename std::add_rvalue_reference< FieldT >::type,
typename std::add_lvalue_reference< FieldT >::type
>
>::type;
int main()
{
std::cout << std::is_rvalue_reference<
addRefU<A, B>
>::value << std::endl;
std::cout << std::is_lvalue_reference<
addRefU<A, B>
>::value << std::endl;
}
http://coliru.stacked-crooked.com/a/21593805f2c6e634 因此,根本没有引用。不允许嵌套std::conditional吗?
您在嵌套的conditional
上忘记了一个::type
:
template<class T, class FieldT>
using addRefU = typename std::conditional<
// ok when true. When false result has no reference at all
false,
typename std::add_rvalue_reference< FieldT >::type,
typename std::conditional<
true,
typename std::add_rvalue_reference< FieldT >::type,
typename std::add_lvalue_reference< FieldT >::type
>::type
>::type;
int main()
{
std::cout << std::is_rvalue_reference<
addRefU<A, B>
>::value << std::endl;
std::cout << std::is_lvalue_reference<
addRefU<A, B>
>::value << std::endl;
}
Live on Coliru
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- C++中是否存在 std::conditional 的懒惰等价物?
- 使用std::conditional中的模板来确定函数参数类型
- std::conditional - 嵌套用法
- 将 std::conditional 与不可转换类型(原始与指针)一起使用
- std::cout doen不喜欢 std::endl 和 String in conditional-if
- 有没有一种方法可以在std::conditional fail上给出更好的错误
- 如何使用 std::conditional 根据模板参数类型设置类型
- std::conditional 的可变模板化使用,其中一种类型是实例化失败
- 用相同的条件编写一系列std::conditional
- c++ 11中嵌套的std::conditional
- c++:是否有类似"boost/std typetraits conditional"的东西在编译时生成一个值(而不是类型)?